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