This question already has answers here:
Appending to an ObjectOutputStream
(6个答案)
已关闭6年。
到目前为止,当我尝试添加对象时,我将获得
但是,每次添加新对象时,我都必须覆盖该文件。这似乎不是加类的最佳解决方案。
有没有一种方法可以将对象追加到现有对象流中?
然后,只需使用标准的ObjectInputStream即可读取整个文件。
(6个答案)
已关闭6年。
到目前为止,当我尝试添加对象时,我将获得
java.io.StreamCorruptedException
。我已经在Internet上搜索了一种克服该问题的方法。到目前为止,我发现的答案是无法完成。解决此问题的一种方法是将对象写入列表,然后将列表写入文件。但是,每次添加新对象时,我都必须覆盖该文件。这似乎不是加类的最佳解决方案。
有没有一种方法可以将对象追加到现有对象流中?
最佳答案
实际上,这很容易做到。当添加到现有流中时,需要使用ObjectOutStream的子类重写writeStreamHeader
,以便在文件中间不写入第二个 header 。例如
class NoHeaderObjectOutputStream extends ObjectOutputStream {
public NoHeaderObjectOutputStream(OutputStream os) {
super(os);
}
protected void writeStreamHeader() {}
}
然后,只需使用标准的ObjectInputStream即可读取整个文件。
10-06 03:47