1

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

问题 1

问题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();
    
4

2 回答 2

5

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

于 2011-07-07T05:31:23.873 回答
4

如果您检查您提到的问题,您将看到您AppendableObjectOutputStream只需要使用将对象附加到文件,如果文件已经包含一些对象。对于空文件,您必须使用普通文件,ObjectOutputStream因为在这种情况下,标题应该写在开头。

于 2011-07-05T08:18:38.443 回答