有没有一种方法可以强制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/