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 中国語 Web サイトの他の関連記事を参照してください。