相关疑难解决方法(0)

附加到ObjectOutputStream

是不是可以附加到ObjectOutputStream

我试图附加到对象列表.以下代码段是一个在作业完成时调用的函数.

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试阅读它时,我只得到文件中的第一个.然后我明白了java.io.StreamCorruptedException.

阅读我正在使用

FileInputStream fis = new FileInputStream
        ( preferences.getAppDataLocation() + "history");
ObjectInputStream in = new ObjectInputStream(fis);    

try{
    while(true)
        history.add((Stuff) in.readObject());
}catch( Exception e ) { 
    System.out.println( e.toString() );
}
Run Code Online (Sandbox Code Playgroud)

我不知道会有多少个物品存在,所以我在读书时没有例外.从谷歌所说的这是不可能的.我想知道是否有人知道方法?

java serialization append objectoutputstream objectinputstream

55
推荐指数
4
解决办法
6万
查看次数

附加到 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)

java serialization objectoutputstream

1
推荐指数
1
解决办法
1万
查看次数