有没有办法强制 ObjectOutputStream 不依赖以前的写入,应该是每次都写入 Object 属性和完整信息?
我可以从二进制文件中看到,它只写了以前版本的某种增量,如果你尝试加载随机项目,它会失败吗?
有没有办法强制 ObjectOutputStream 不依赖以前的写入,应该是每次都写入 Object 属性和完整信息?
我可以从二进制文件中看到,它只写了以前版本的某种增量,如果你尝试加载随机项目,它会失败吗?
是的,你想要ObjectOutputStream.reset()
public void reset() throws IOException
重置将忽略已写入流的任何对象的状态。状态被重置为与新的 ObjectOutputStream 相同。流中的当前点被标记为重置,因此相应的 ObjectInputStream 将在同一点重置。之前写入流的对象不会被称为已经在流中。它们将再次写入流。
早些时候,Javadoc 讨论了编写对已经见过的对象的引用:
对象的默认序列化机制写入对象的类、类签名以及所有非瞬态和非静态字段的值。对其他对象的引用(瞬态或静态字段除外)也会导致这些对象被写入。对单个对象的多个引用使用引用共享机制进行编码,以便对象的图形可以恢复到与原始对象相同的形状。
正如reset
Javadoc 所解释的,调用reset
会导致流状态被重置。您应该知道此重置操作本身会将字节写入流(以便解码端也知道何时重置流)。