当前位置: 首页 > Thinking in Java > 正文

第 18 章 – java IO系统 – 序列化 与反序列化 – Externalizable接口的替代,static字段不会序列化(p597)

第 18 章 – java IO系统 – 序列化 与反序列化 – Externalizable接口的替代,static字段不会序列化(p597)

一. 如果不想实现Externalizable接口(为什么不想?难道是因为接口方法是public的,谁都可以调用么?),

可以使用下面方法替代:

 

1. 对象依然是要实现Serializable接口.

2. 为对象添加下面的两个方法,注意方法由private修饰,方法的签名必须和下面的一样.

 

这里的设计比较奇怪和混乱,因为private方法也能被调用了,Thinking in Java 作者对此进行了批评.

 

3. 在有了上面的两个方法后,对象 序列化 时,ObjectOutputStream.writeObject()方法调用时,会检查

   所传递的Serializable对象看看是否有上面的writeObject方法,如果有,则跳出正常的序列化过程,

   改成调用Serializable对象的writeObject方法.反序列化时ObjectInputStream的readObject与之

   类似.

 

   另外,可以在2中的writeObject中调用defaultWriteObject()来执行默认的序列化过程(默认的writeObject).

 

   下面的示例代码中,采用这种替代方式,使用了defaultWriteObject()来处理默认的序列化操作,而对于由transient

   修饰的字段则额外进行了处理.

 

二. 静态字段不会初始化. 在一个地方序列化了对象,在另一个地方反序列化时,static字段值恢复成类定义是的默认值.   

   示例.首先,执行下面的类生成序列化文件:

 读取序列化文件的类,导致重新加载Student的Class文件,静态变量恢复成默认值了.

 

打个赏呗

   微信打赏  支付宝打赏


本文固定链接: https://www.jack-yin.com/coding/thinking-in-java/2105.html | 边城网事

该日志由 边城网事 于2015年03月18日发表在 Thinking in Java 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 第 18 章 – java IO系统 – 序列化 与反序列化 – Externalizable接口的替代,static字段不会序列化(p597) | 边城网事
关键字: ,

第 18 章 – java IO系统 – 序列化 与反序列化 – Externalizable接口的替代,static字段不会序列化(p597) 暂无评论

发表评论

快捷键:Ctrl+Enter