附加到 ObjectOutputStream(在不关闭流的情况下写入多个对象)

Mov*_*ast 1 java serialization objectoutputstream

免责声明我的问题与以下两个链接不同

问题 1

问题2

    public class AppendableObjectOutputStream extends ObjectOutputStream {
      public AppendableObjectOutputStream(OutputStream out) throws IOException {
        super(out);
      }

      @Override
      protected void writeStreamHeader() throws IOException {}
}
Run Code Online (Sandbox Code Playgroud)
  • 上述解决方案的问题在于,它们不支持在不关闭流的情况下将多个对象写入可附加流。
  • 如果我打开可追加流,写入多个对象 - 那么在读取时我只能正确读取第一个对象,而在尝试读取第二个对象时,我得到 EOF 异常。
  • 如果我像在对象上写入可附加流那样继续,请关闭流。然后再次打开流,关闭另一个对象,依此类推。这样我就可以正确读取多个对象。

        fileOutputStream = new FileOutputStream("abc.dat",true);
         outputBuffer = new BufferedOutputStream(fileOutputStream);
         objectStream = new AppendableObjectOutputStream(outputBuffer);
         BucketUpdate b1 = new BucketUpdate("getAllProducts1",null,"1",null);
         BucketUpdate b2 = new BucketUpdate("getAllProducts2",null,"2",null);
         BucketUpdate b3 = new BucketUpdate("getAllProducts3",null,"3",null);
         objectStream.writeObject(b1);
         objectStream.writeObject(b2);
         objectStream.writeObject(b3);
         objectStream.close();
    
    Run Code Online (Sandbox Code Playgroud)

Sur*_*ran 5

在写入每个对象后调用 ObjectOutputStream.reset() 将解决此问题。