【问题标题】:need of defaultReadObject() and defaultWriteObject()需要 defaultReadObject() 和 defaultWriteObject()
【发布时间】:2026-01-30 10:15:02
【问题描述】:

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

【问题讨论】:

    标签: java serialization


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这里some useful lines from the Docs

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

      写作也是如此。

      【讨论】: