首頁 > Java > java教程 > 可以追加到 Java 中現有的 ObjectOutputStream 嗎?

可以追加到 Java 中現有的 ObjectOutputStream 嗎?

Patricia Arquette
發布: 2024-12-16 20:19:17
原創
147 人瀏覽過

Can You Append to Existing ObjectOutputStreams in Java?

附加到現有物件流

附加到 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板