【发布时间】:2026-01-30 10:15:02
【问题描述】:
当类实现serializable 接口时,为什么需要将defaultReadObject() 和defaultWriteObject() 作为readObject(ObjectInputStream o) 和writeObject(ObjectOutputStream o) 方法的第一条语句。
【问题讨论】:
标签: java serialization
当类实现serializable 接口时,为什么需要将defaultReadObject() 和defaultWriteObject() 作为readObject(ObjectInputStream o) 和writeObject(ObjectOutputStream o) 方法的第一条语句。
【问题讨论】:
标签: java serialization
defaultReadObject() 和defaultWriteObject() 应该是readObject(ObjectInputStream o) 和writeObject(ObjectOutputStream o). 内部的第一个方法调用,它分别读取和写入类的所有non transient 字段。这些方法还有助于向后和未来的兼容性。如果将来您向类添加一些 non-transient 字段并且您试图通过旧版本的类对其进行反序列化,那么 defaultReadObject() 方法将忽略新添加的字段,类似地如果您通过新的反序列化旧的序列化对象版本,则新的非瞬态字段将从 JVM 获取默认值,即如果它的对象则为 null,否则如果原始,则布尔值为 false,int 为 0 等等。
【讨论】:
【讨论】: