对象系列化

 

系列化的过程就是对象写入字节流和从字节流中读取对象.

 

将对象状态转换成字节流之后,可以用java.io包中的各种字节流类将其保存到文件中,管理到另一线程中或通过网络连接将对象数据发送到另一主机.(XML系列化指的是把对象转换成XML数据,传输到目的地后再把XML数据反序列化为对象)

 

对象系列化可以实现分布式对象.RMI要利用对象系列化运行运程主机上的服务,就像在本地机上运行对象时一样.

 

Java对象系列化不仅保留一个对象的数据,而且递归保存对象引用的每个对象的数据.可以将整个对象层次希尔字节流中,可以保存在文件中或在网络连接上传递.利用对象系列化可以进行对象的“深复制”,即复制对象本身及引用的对象本身.系列化一个对象可能得到整个对象系列.

 

Java系列化比较简单,实现Serializable接口的类对象可以转换成字节流或从字节流恢复,不需要在类中增加任何代码.只有极少数情况下才需要定制代码保存或恢复对象状态.

 

Serializable是标志性接口,不具有方法.

 

注意:不是每个类都可系列化,有些类是不能系列化的,例如涉及吸纳长的类与特定JVM有非常复杂的关系.

 

Java库中的类,String,都实现了Serializable 接口,所以它们都可以进行Serialization操作.

对一个对象进行Serialization 操作时,不仅会把对象在内存中的数据保存下来,还会把对象中所包含的可Serialization成员对象也保存下来,.如果对象中包含了没有实现Serializable接口的成员对象,那将在尝试对对象进行Serializable操作时,将发生错误!

对一个Serializable对象进行次第读取时,并不会调用任何构造函数(包含default函数).这是因为对象中的所有数据都是通过InputStream读取的数据来恢复的,所有不用通过构造函数来进行初始化.

进行系列读取时,在执行读取操作的class中一定要能找到相应的class文件.

 

 

系列化:将数据分解成字节流,以便存储在文件中或在网络上传输.

反序列化:打开字节流并重构对象.

 

对象系列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据.恢复数据要求有恢复数据的对象实例.ObjectOutputStream中的系列化过程与字节流连接,包含对象类型和版本信息.反序列化时,JVM用头信息生成对象实例,然后将对象字节流中的数据复制到对象数据成员中.

 

对象系列化:

 

 

FileOutputStream f=new FileOutputStream("D:\\simple.txt");
ObjectOutputStream s=new ObjectOutputStream(f);
s.writeObject("Today");
s.writeObject(new Date());
s.flush();//在方法返回前显式清空输出缓冲区!

 

对象反序列化:

FileInputStream in=new FileInputStream("D:\\simple.txt");
ObjectInputStream s=new ObjectInputStream(in);
String today=(String)s.readObject();
Date data=(Date)s.readObject();
System.out.println(today);
System.out.println(data);
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值