Java中的序列化与反序列化

2014-11-24 09:47:11 · 作者: · 浏览: 1

序列化和反序列化是通过ObjectInputStream和ObjectOutputStream的readObject()和writeObject()实现的,序列化的过程是一个对象流状态保存的过程,这里什么叫对象流,可以理解为一系列的对象,因为本身一个对象的内部的字段都是一个个对象,实际上是通过“级联”的方式,保存跟此对象所有关联的对象的状态,实际上保存了跟此对象有关系的一张“对象网”。


反序列化是还原对象状态的过程,这种还原的过程可能在同一个应用中,可能在不同的应用中,可能在不同的主机上,还原的过程不是读出原来对象的字段值然后调用构造函数重新new一个对象,而是“直接地”反序列化为一个Object对象,并没有调用该类的构造函数,jvm也没有加载该类到方法区,还原后的对象若在不同的主机,想通过反射获得更多改对象的描述信息,必须保证JVM能在本地类路径或者因特网的其他什么地方找到相关的.class文件。


序列化也可以自己控制,使用Externalizable接口,此接口继承自Serializable接口,和Serializable不同的是,使用Externalizable接口,在恢复对象的时候是调用的该类的无参构造方法,若无参构造方法不是public的,在恢复对象的时候会抛出异常,下面的代码节选自Think in java




输入的结果为:


Constructing objects:
Blip1 Constructor
Blip2 Constructor
Saving objects:
Blip1.writeExternal
Blip2.writeExternal
Recovering b1:
Blip1 Constructor
Blip1.readExternal