ホームページ >Java >&#&チュートリアル >Java で既存の ObjectOutputStream にオブジェクトを追加するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。