ObjectOutputStream状态机?

时间:2013-10-14 13:48:05

标签: java objectoutputstream

有没有办法强制ObjectOutputStream不依赖于以前的写入,应该每次都写入Object属性和完整信息?

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

1 个答案:

答案 0 :(得分:2)

是的,您需要ObjectOutputStream.reset()

public void reset() throws IOException
  

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

早些时候,Javadoc讨论了对已经看过的对象的引用:

  

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

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