This question already has answers here:
Appending to an ObjectOutputStream

(6个答案)


已关闭6年。




到目前为止,当我尝试添加对象时,我将获得java.io.StreamCorruptedException。我已经在Internet上搜索了一种克服该问题的方法。到目前为止,我发现的答案是无法完成。解决此问题的一种方法是将对象写入列表,然后将列表写入文件。

但是,每次添加新对象时,我都必须覆盖该文件。这似乎不是加类的最佳解决方案。

有没有一种方法可以将对象追加到现有对象流中?

最佳答案

实际上,这很容易做到。当添加到现有流中时,需要使用ObjectOutStream的子类重写writeStreamHeader,以便在文件中间不写入第二个 header 。例如

class NoHeaderObjectOutputStream extends ObjectOutputStream {
  public NoHeaderObjectOutputStream(OutputStream os) {
    super(os);
  }
  protected void writeStreamHeader() {}
}

然后,只需使用标准的ObjectInputStream即可读取整个文件。

10-06 03:47