这是窍门:子类ObjectOutputStream并重写
writeStreamHeader方法:
public class AppendingObjectOutputStream extends ObjectOutputStream { public AppendingObjectOutputStream(OutputStream out) throws IOException { super(out); } @Override protected void writeStreamHeader() throws IOException { // do not write a header, but reset: // this line added after another question // showed a problem with the original reset(); }}要使用它,只需检查历史文件是否存在,然后实例化此可附加流(如果文件存在=如果我们追加=我们不需要标题)或原始流(如果文件不存在=实例化)我们需要一个标头)。
编辑
我对班级的第一次命名感到不满意。这样比较好:它描述的是“用途”,而不是“完成方式”
编辑
为了澄清起见,再次更改了名称,该流仅用于附加到现有文件。它不能用于创建带有对象数据的新文件。
编辑
reset()在此问题之后添加了一个调用,以表明原来的版本
writeStreamHeader在某些情况下可以改写为无操作,这会创建无法读取的流。



