Desclaimer我的问题与以下两个链接不同
public class AppendableObjectOutputStream extends ObjectOutputStream {
public AppendableObjectOutputStream(OutputStream out) throws IOException {
super(out);
}
@Override
protected void writeStreamHeader() throws IOException {}
}
如果我按照将对象写入可附加流的方式,关闭流。然后再打开流,写另一个对象关闭等等。这样我就能正确读取多个对象。
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();
答案 0 :(得分:4)
在编写每个对象后调用ObjectOutputStream.reset()将解决此问题。
答案 1 :(得分:3)
如果您检查问题mentioned,您将看到如果文件已包含某些对象,则必须仅使用AppendableObjectOutputStream
附加对象进行归档。对于空文件,您必须使用普通ObjectOutputStream
,因为在这种情况下标题应写入开头。