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