defaultReadObject()和defaultWriteObject()的必要性

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

8

defaultReadObject()defaultWriteObject() 应该在 readObject(ObjectInputStream o)writeObject(ObjectOutputStream o)方法中作为第一个调用。它们分别读取和写入类的所有非瞬态字段。这些方法还有助于向后和向前兼容性。如果未来您将一些 non-transient 字段添加到类中,并尝试使用旧版本的类进行反序列化,那么 defaultReadObject() 方法将忽略新添加的字段;同样地,如果通过新版本反序列化旧的序列化对象,则新的非瞬态字段将从JVM获取默认值,即如果是对象则为 null,如果是原始类型,则布尔值为 false,整数为 0,等等。


2

这里是一些来自文档的有用行:

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

对于写入也是如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接