有没有一种方法可以强制ObjectOutputStream不依赖先前的写入,即应该每次写入Object属性和完整信息?

我可以从二进制文件中看到,该文件仅比以前的版本写入某种增量,如果尝试加载随机项,它将失败吗?

最佳答案

是的,您想要ObjectOutputStream.reset()

public void reset() throws IOException



  重置将忽略任何已写入流的对象的状态。将状态重置为与新的ObjectOutputStream相同。流中的当前点被标记为reset,因此相应的ObjectInputStream将在同一点被重置。先前写入流中的对象将不会被视为已经存在于流中。它们将再次写入流中。


先前,Javadoc讨论了如何编写对已经看到的对象的引用:


  对象的默认序列化机制将写入对象的类,类签名以及所有非瞬态和非静态字段的值。对其他对象的引用(在瞬态或静态字段中除外)会使这些对象也被写入。使用引用共享机制对单个对象的多个引用进行编码,以便可以将对象的图恢复为与编写原始图时相同的形状。


正如reset Javadoc解释的那样,调用reset会导致流状态被重置。您应该知道,此重置操作本身会将字节写入流(以便解码端也知道何时重置流)。

关于java - ObjectOutputStream状态机?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19361764/

10-10 19:29