Java 附加到ObjectOutputStream

无法附加到ObjectOutputStream吗?

我正在尝试附加到对象列表。摘录后的代码是一个在作业完成时调用的函数。

FileOutputStream fos = new FileOutputStream

(preferences.getAppDataLocation() + "history" , true);

ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );

out.close();

但是,当我尝试读取它时,我只会得到文件中的第一个。然后我得到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() );

}

我不知道会出现多少个对象,因此我在阅读时没有例外。根据Google的说法,这是不可能的。我想知道是否有人知道吗?

回答:

子类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();

}

}

要使用它,只需检查历史文件是否存在,然后实例化此可附加流(如果文件存在=如果我们追加=我们不需要头)或原始流(如果文件不存在=实例化)我们需要一个标头)。

以上是 Java 附加到ObjectOutputStream 的全部内容, 来源链接: utcz.com/qa/400484.html

回到顶部