附加到現有物件流
附加到 ObjectOutputStream 是否可行的問題就出現了。嘗試在讀取時間間歇性地追加物件清單失敗,導致 java.io.StreamCorruptedException。
典型用法包括:
FileOutputStream fos = new FileOutputStream (preferences.getAppDataLocation() + "history" , true); ObjectOutputStream out = new ObjectOutputStream(fos); out.writeObject( new Stuff(stuff) ); out.close();
隨後,在讀取時:
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() ); }
子類化 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 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!