ホームページ >Java >&#&チュートリアル >Java で既存の ObjectOutputStream に追加できますか?

Java で既存の ObjectOutputStream に追加できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-16 20:19:17152ブラウズ

Can You Append to Existing ObjectOutputStreams in Java?

既存のオブジェクト ストリームへの追加

ObjectOutputStream に追加できるかどうかという疑問が生じます。オブジェクトのリストを追加しようとすると、読み取り中に断続的に失敗し、java.io.StreamCorruptedException が発生します。

一般的な使用法には次のようなものがあります。

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();

その後の読み取り中:

FileInputStream fis = new FileInputStream
        ( preferences.getAppDataLocation() + "history");
ObjectInputStream in = new ObjectInputStream(fis);    

try{
    while(true)
        history.add((Stuff) in.readObject());
}catch( Exception e ) { 
    System.out.println( e.toString() );
}

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, but reset:
    // this line added after another question
    // showed a problem with the original
    reset();
  }

}

履歴ファイルが存在する場合は追加可能なストリームをインスタンス化し (ヘッダーなしで追加)、存在しない場合は元のストリームをインスタンス化します (ヘッダー付きで作成)。

以上がJava で既存の ObjectOutputStream に追加できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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