ホームページ >Java >&#&チュートリアル >データを上書きせずに既存の ObjectOutputStream ファイルに追加するにはどうすればよいですか?

データを上書きせずに既存の ObjectOutputStream ファイルに追加するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 16:49:09387ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。