Hon*_*Xin 14 java serialization
当我阅读有关Serializable界面的内容时Thinking in java,有一句话说:
如果使用默认机制来编写对象的非瞬态部分,则必须将writeWriteObject()作为writeObject()中的第一个操作,并将defaultReadObject()作为readObject()中的第一个操作.
添加writeObject/readObject方法 - 如果读取流的版本具有这些方法,则通常需要readObject读取默认序列化写入流所需的数据.它应该在读取任何可选数据之前先调用defaultReadObject.期望writeObject方法像往常一样调用defaultWriteObject来写入所需的数据,然后可以编写可选数据.
所以,如果我不defaultWriteObject先打电话,如果我在电话会议之前写了别的话,那会有问题吗?我试过了,但似乎它在我的例子中仍然有效.那么如果有任何问题,它会在什么条件下发生?
Java 对象序列化规范对此主题含糊不清:
任一
ObjectOutputStream的defaultWriteObject或writeFields方法必须调用编写将通过相应的需要的任何可选的数据之前一次(也是唯一的一次)readObject的方法来恢复该对象的状态; 即使没有写入可选数据,defaultWriteObject还是writeFields必须调用一次。如果defaultWriteObject或writeFields在写入可选数据(如果有)之前没有调用一次,那么在无法解析定义相关方法的类的情况下,实例反序列化的行为是未定义的。ObjectInputStreamwriteObject
这是一个旧线程,它给出了可能发生问题的示例。
这是另一个示例的 JBoss AS Jira 票证。