首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

相干Java序列化(二)

2013-10-19 
有关Java序列化(二)?程序的输出为:正在进行序列持久化读取持久化对象nameAlex age26 workDay7 fClub

有关Java序列化(二)

?

程序的输出为:

正在进行序列持久化读取持久化对象name==Alex age==26 workDay==7 fClub==Juventus

?

??????? 跟上一篇日志的输出就不一样了,workDay的值变成了7,而不是0了。可以看到workDay在Person类的声明还是一样,还是用transient修饰了。问题的关键是Person类里新添加的writeObject和readObject方法。

??????? 在writeObject()方法中会先调用ObjectOutputStream中的defaultWriteObject()方法,该方法会执行默认的序列化机制,如上篇日志所说,此时会忽略掉workDay字段。然后再调用writeInt()方法显式地将age字段写入到ObjectOutputStream中。readObject()的作用则是针对对象的读取,其原理与writeObject()方法相同。

??????? 在foo.ser文件里当然也有了workDay。这里这两个方法只是实现了workDay声明中去掉transient等效的功能,当然更普遍的是想在对象序列化时进行一些额外的别的操作。

??????? 需要注意的是,writeObject()与readObject()都是private方法,那么它们是如何被调用的呢?毫无疑问,是使用反射。

?

参考:

http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html

热点排行