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

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

Patricia Arquette
リリース: 2024-12-16 20:19:17
オリジナル
146 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート