需要defaultReadObject()和defaultWriteObject()

时间:2013-06-21 13:00:40

标签: java serialization

当类实现defaultReadObject()接口时,为什么需要将defaultWriteObject()readObject(ObjectInputStream o)写为writeObject(ObjectOutputStream o)serializable方法中的第一个语句。

2 个答案:

答案 0 :(得分:7)

defaultReadObject()defaultWriteObject()应该是readObject(ObjectInputStream o)writeObject(ObjectOutputStream o).内的第一个方法调用。它分别读取和写入类的所有non transient字段。这些方法还有助于向后和将来的兼容性。如果将来向类中添加一些non-transient字段,并且您尝试通过旧版本的类反序列化,则defaultReadObject()方法将忽略新添加的字段,类似地,如果您通过反序列化旧的序列化对象新版本然后新的非瞬态字段将从JVM获取默认值,即如果其对象然后为null,否则如果原语然后布尔值为false,int为0等...

答案 1 :(得分:2)

此处some useful lines from the Docs

  

defaultReadObject()方法从此流中读取当前类的非静态和非瞬态字段。

同样的写作也是如此。