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