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