1 / 13
文档名称:

java序列化与反序列化.doc

格式:doc   大小:121KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

java序列化与反序列化.doc

上传人:63229029 2017/10/15 文件大小:121 KB

下载得到文件列表

java序列化与反序列化.doc

相关文档

文档介绍

文档介绍:java序列化与反序列化
一、什么是序列化?
序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。
序列化是一种将Java对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回Java对象原有的状态。
序列化的思想是“冻结”对象状态,传输对象状态(写到磁盘、通过网络传输等等),然后“解冻”状态,重新获得可用的Java对象。所有这些事情的发生有点像是魔术,这要归功于ObjectInputStream/ObjectOutputStream类、完全保真的元数据,以及程序员愿意用Serializable标识接口标记他们的类,从而“参与”这个过程。
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
二、为什么要序列化?什么情况下需要序列化?
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送,接收方则需要把字节序列再恢复为对象。
对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样。
java对象序列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中,可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的"深复制",即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。
序列化能将对象转成如XML/Bit流,方便对象的磁盘存储、网络传输(webService,RMI)。
对象的寿命常随着生成该对象的程序的终止而终止。有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复以延续其状态。
如何做到程序终止后对象继续存在?
如何将对象在网络上传输?
三、相关接口和类
(1)Serializable接口和Externalizable接口
(2)ObjectOutput接口:它继承DataOutput接口并且支持对象的序列化,其内的writeObject()方法实现存储一个对象。
(3)ObjectOutputStream类:它继承OutputStream类并且实现ObjectOutput接口。利用该类来实现将对象存储(调用ObjectOutput接口中的writeObject()方法)。
(4)ObjectInput接口:它继承DataInput接口并且支持对象的序列化,其内的readObject()方法实现读取一个对象。
(5)ObjectInputStream类:它继承InputStream类并且实现ObjectInput接口。利用该类来实现将对象存储(调用ObjectInput接口中的readObject()方法)。
四、怎么实现序列化?
要被序列化的类必须实现Serializable接口或者Externalizable接口之一。
实现Serializable接口,不需要实现任何方法,只是一个标记接口。
.;
import ;
public class Person implements Serializable{
/**
* serial version id
*/
private static final long serialVersionUID = -2858407989098901728L;

public Person(String name,int age){
= name;
= age;
}

private String name;
private int age;

public String getName() {
return name;
}
public void setName(String name) {
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
= age;
}

public String toString(){
return "[Person:name="+name+"age="+age+"]";
}

}
(