java - 追加到 ObjectOutputStream(写入多个对象而不关闭流)

标签 java serialization objectoutputstream

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

Question 1

Question 2

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

      @Override
      protected void writeStreamHeader() throws IOException {}
}
  • 上述解决方案的问题在于,它们不支持在不关闭流的情况下将多个对象写入可追加流。
  • 如果我打开可附加流,写入多个对象 - 那么在读取时我只能正确读取第一个对象,并且在尝试读取第二个对象时,我会收到 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();
    

最佳答案

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

关于java - 追加到 ObjectOutputStream(写入多个对象而不关闭流),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6578973/

相关文章:

Java ObjectOutputStream 未写入 ZipEntry

java VTD-解析器逻辑

java - 我应该用什么来跟踪 java 中可变对象的详细信息

java - 如何在scriplet jsp中访问javascript变量

.net - 当列名包含空格时,为什么我的 DataTable 不能正确序列化?

Java - 通过 ObjectOutputStream 发送文档

java - 带有代码 3xx 和空 'Location' header 的 HTTP 响应

使用 xsd.exe 或 svcutil.exe 的 UWP 和 Xamarin 的 C# XML 序列化

java - 使用 Jackson 与 JSON 进行交互,其中每个类都实现相同的接口(interface)

java - 写入 ObjectOutputStream 附加文件,不断收到 StreamCorruptedException 错误