首頁 > Java > java教程 > 如何附加到現有的 ObjectOutputStream 檔案而不覆寫資料?

如何附加到現有的 ObjectOutputStream 檔案而不覆寫資料?

Barbara Streisand
發布: 2024-12-12 16:49:09
原創
392 人瀏覽過

How Can I Append to an Existing ObjectOutputStream File Without Overwriting Data?

ObjectOutputStream 附加:具有子類化的解決方案

附加到 ObjectOutputStream 可能是一項有問題的任務。正如您所發現的,ObjectOutputStream 在寫入現有檔案時的預設行為是覆寫它,從而導致資料遺失。

要解決此問題,關鍵是重寫 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
    reset(); // Added to fix potential issues with previous implementation
  }
}
登入後複製

AppendingObjectOutputStream 子類別繼承自原始 ObjectOutputStream 類別並重寫 writeStreamHeader 方法。在這個重寫的方法中,我們不會寫入標頭,而是重置流。這有效地允許我們將資料附加到現有文件而不覆蓋它。

要使用此技術,您可以檢查歷史文件是否存在。如果檔案存在,則實例化AppendingObjectOutputStream;否則,使用常規的 ObjectOutputStream。以下是使用此方法的程式碼的更新版本:

OutputStream out;
if (historyFile.exists()) {
  out = new AppendingObjectOutputStream(new FileOutputStream(historyFile, true));
} else {
  out = new ObjectOutputStream(new FileOutputStream(historyFile));
}
out.writeObject(new Stuff(stuff));
out.close();
登入後複製

透過在附加到現有檔案時使用 AppendingObjectOutputStream 類,您可以在新增物件時保留現有資料。此技術可讓您建立持久資料存儲,可根據需要成長,而無需覆蓋或資料遺失。

以上是如何附加到現有的 ObjectOutputStream 檔案而不覆寫資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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