[size=medium]
Object serialization的定义:
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被完全存储以备以后重新生成原来的对象。
serialization不但可以在本机做,而且可以经由网络操作(就是猫小说的RMI)。这个好处是很大的----因为它自动屏蔽了操作系统的差异,字节顺序(用Unix下的c开发过网络编程的人应该知道这个概念,我就容易在这上面犯错)等。比如,在Window平台生成一个对象并序列化之,然后通过网络传到一台Unix机器上,然后可以在这台Unix机器上正确地重构这个对象。
Object serialization主要用来支持2种主要的特性:
1。Java的RMI(remote method invocation).RMI允许象在本机上一样操作远程机器上的对象。当发送消息给远程对象时,就需要用到serializaiton机制来发送参数和接收返回直。
2。Java的JavaBeans. Bean的状态信息通常是在设计时配置的。Bean的状态信息必须被存起来,以便当程序运行时能恢复这些状态信息。这也需要serializaiton机制。
代码:
[size=medium][/size][size=x-large][/size]import java.io.*;
public class SerializationDemo{
public static void main(String args[]){
//Object serialization
try{
MyClass object1=new MyClass("Hello",-7,2.7e10);
System.out.println("object1:"+object1);
FileOutputStream fos=new FileOutputStream("serial");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(object1);
oos.flush();
oos.close();
}
catch(Exception e){
System.out.println("Exception during serialization:"+e);
System.exit(0);
}
//Object deserialization
try{
MyClass object2;
FileInputStream fis=new FileInputStream("serial");
ObjectInputStream ois=new ObjectInputStream(fis);
object2=(MyClass)ois.readObject();
ois.close();
System.out.println("object2:"+object2);
}
catch(Exception e){
System.out.println("Exception during deserialization:"+e);
System.exit(0);
}
}
}
class MyClass implements Serializable{
String s;
int i;
double d;
public MyClass(String s,int i,double d){
this.s=s;
this.i=i;
this.d=d;
}
public String toString(){
return "s="+s+";i="+i+";d="+d;
}
}
程序运行结果:object1和object2的实例变量是一样的,输出如下:
object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10
]
[/size]
分享到:
相关推荐
通过实现Serializable接口,开发者可以不使用这两个魔术方法,直接控制整个序列化和反序列化过程。 在了解了如何使用PHP的Serializable接口之后,开发者还需要掌握其他与面向对象编程相关的知识点,如继承、封装、...
在目标Activity中,我们可以使用getSerializableExtra()方法来获取传过来的对象: ```java Intent intent = getIntent(); if (intent != null) { User receivedUser = (User) intent.getSerializableExtra("user_...
总的来说,将`Serializable`对象转化为`Stream`涉及对象的序列化和流的使用,这对于在网络上传输对象或者在服务器端与客户端之间共享数据是非常有用的。注意,序列化和反序列化可能会涉及安全风险,比如序列化攻击,...
另外,序列化还涉及到版本控制问题,如果类的结构(如字段、方法等)发生变化,可以使用`serialVersionUID`来指定序列化版本。默认情况下,JVM会根据类的结构自动生成一个版本号,但如果手动定义`serialVersionUID`...
### C#中Serializable的作用与对象序列化详解 #### 一、引言 在现代软件开发中,特别是基于.NET框架的应用程序开发中,对象序列化是一项非常重要的技术。它允许将对象的状态转换为一种持久的形式(如文件或网络传输...
通过`put()`系列方法,我们可以轻松地将这些数据放入`Bundle`,然后使用相应的`get()`方法在接收端取出。 例如,传递一个整型变量`intValue`: ```java Bundle bundle = new Bundle(); bundle.putInt("intValue", ...
使用`writeObject()`和`readObject()`方法可以自定义序列化的行为。 优点: - 实现简单,只需要在类上添加`implements Serializable`即可。 - 序列化后的数据可以跨平台传输。 缺点: - 性能较低,因为...
在Java中,如果一个类需要支持序列化,那么该类需要实现`java.io.Serializable`接口,虽然这个接口没有定义任何方法,但是它的存在作为一个标记,表明该类的对象可以被序列化。 序列化的优点主要有以下几点: 1. **...
实现 `Serializable` 接口后,可以通过 `java.io.ObjectOutputStream` 将对象写入文件或通过网络传输,也可以使用 `java.io.ObjectInputStream` 从文件读取对象或将对象从网络接收。 #### 三、序列化过程 序列化的...
3. **序列化对象**:使用`writeObject()`方法将对象写入`ObjectOutputStream`。 ```java os.writeObject(myObject1); os.writeObject(myObject2); os.writeObject(myObject3); ``` 4. **关闭`...
本文将深入探讨Android中的Serializable序列化机制,包括其原理、使用场景以及注意事项。 一、Serializable接口概述 Serializable接口是Java提供的一种序列化机制,它允许对象的状态被转换成字节流,以便于存储或者...
Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。 Serializable...
4. **序列化过程**:使用`ObjectOutputStream`的`writeObject()`方法将对象写入流,如下所示: ```java MyObject obj = new MyObject(); try (ObjectOutputStream oos = new ObjectOutputStream(new ...
3. **写入对象**:接下来,使用`ObjectOutputStream`对象的`writeObject`方法将对象写入到输出流中。 ```java os.writeObject(myObject); ``` 4. **关闭输出流**:最后,记得关闭输出流以释放资源。 ```java os...
3. **远程方法调用(RMI)**:在使用RMI技术进行分布式计算时,需要跨网络传输对象,这时序列化也是必不可少的。 #### 三、序列化的工作原理 在对一个对象进行序列化时,实际上是对该对象的实例变量的值进行了保存。...
2. **放入Intent**:与Serializable类似,使用putExtra()方法,但是需要传入Parcelable对象: ```java MyObject myObject = new MyObject(); Intent intent = new Intent(this, TargetActivity.class); intent....
`Serializable`是Java提供的标准序列化接口,无需实现任何方法,只需在类上添加`implements Serializable`即可。对象序列化后可以写入文件或网络流。然而,`Serializable`效率较低,因为它会序列化对象的所有属性,...
通过提供的链接(http://www.cnblogs.com/xubuhang/p/4500479.html),我们可以预期会深入探讨`Serializable`接口的用法,并可能包含一个实际的Java代码演示。 `Serializable`接口在Java中并不包含任何方法,它只是...
在使用 Serializable 接口时,需要注意以下几点: * 在实现 Serializable 接口时,需要声明所有的实例变量,否则将无法正确地序列化对象。 * 在序列化对象时,需要将对象的所有实例变量写入到字节序列中,这样才能...
实现`Serializable`接口,配合使用特殊序列化方法,以及妥善管理`serialVersionUID`,可以有效地控制和优化对象的序列化过程。这对于数据持久化、网络通信以及分布式系统中的对象交换都有着至关重要的作用。