將物件附加到ObjectOutputStream
雖然ObjectOutputStream 提供了一種方便的方法來序列化對象,但它不支援附加到現有流。出現此限制的常見場景是嘗試維護文件中的物件列表,並在建立新物件時新增物件。
要克服此挑戰,需要自訂解決方案。一種方法是子類化 ObjectOutputStream 並重寫 writeStreamHeader 方法。此方法負責寫入流標頭,其中包含有關正在序列化的物件類型的信息。透過重寫此方法,我們可以建立一個不寫入標頭的流,從而允許我們將物件追加到現有文件中。
以下是 AppendingObjectOutputStream 類別的範例:
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: reset(); } }
要使用此類,請檢查歷史檔案是否存在。如果是,則實例化 AppendingObjectOutputStream 以追加物件。否則,實例化標準 ObjectOutputStream 以建立帶有標頭的新檔案。
透過重寫 writeStreamHeader 方法,AppendingObjectOutputStream 允許我們將物件附加到現有文件,從而提供了一種維護持久物件清單的方法,而無需覆寫現有資料。
以上是如何將物件追加到現有的 ObjectOutputStream?的詳細內容。更多資訊請關注PHP中文網其他相關文章!