ホームページ >Java >&#&チュートリアル >Java で既存の ObjectOutputStream にオブジェクトを追加するにはどうすればよいですか?

Java で既存の ObjectOutputStream にオブジェクトを追加するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-20 09:06:13567ブラウズ

How Can I Append Objects to an Existing ObjectOutputStream in Java?

ObjectOutputStream への追加: 解決策

Java では、ObjectOutputStream への追加は本質的にサポートされていません。標準の ObjectOutputStream を使用して既存のファイルに追加しようとすると、読み取り時に StreamCorruptedException が発生します。

この制限を克服するには、ObjectOutputStream をサブクラス化し、その writeStreamHeader メソッドをオーバーライドします。変更された 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:
    this.reset();
  }

}

このクラスを利用するには、対象の履歴ファイルが存在するかどうかを確認します。存在する場合は、AppendingObjectOutputStream をインスタンス化して、ヘッダーを書き込まずにデータを追加します。ファイルが存在しない場合は、標準の ObjectOutputStream をインスタンス化してヘッダーを書き込みます。

// Check if history file exists
if (fileExists) {
  // Appendable stream
  ObjectOutputStream out = new AppendingObjectOutputStream(new FileOutputStream(filePath, true));
} else {
  // Standard stream
  ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filePath));
}

AppendingObjectOutputStream を使用すると、既存の履歴ファイルにオブジェクトを正常に追加でき、書き込まれたすべてのオブジェクトを確実に読み取れるようになります。正しい順序で。

以上がJava で既存の ObjectOutputStream にオブジェクトを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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