如何附加到现有的java.io.ObjectStream?


问题内容

至于现在,我将java.io.StreamCorruptedException在尝试附加对象时得到提示。我已经在互联网上搜索了一种解决方法。到目前为止,我发现的答案是无法完成。解决此问题的一种方法是将对象写入列表,然后将列表写入文件。

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

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


问题答案:

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

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

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