1

免責事項私の質問は、次の 2 つのリンクとは異なります

質問1

質問2

    public class AppendableObjectOutputStream extends ObjectOutputStream {
      public AppendableObjectOutputStream(OutputStream out) throws IOException {
        super(out);
      }

      @Override
      protected void writeStreamHeader() throws IOException {}
}
  • 上記のソリューションの問題は、ストリームを閉じることなく追加可能なストリームに複数のオブジェクトを書き込むことをサポートしていないことです。
  • 追加可能なストリームを開いて複数のオブジェクトを書き込むと、読み取り時に最初のオブジェクトのみを適切に読み取ることができ、2 番目のオブジェクトを読み取ろうとすると EOF 例外が発生します。
  • 追加可能なストリームにオブジェクトを書き込むような方法で進むと、ストリームを閉じます。次に、再びストリームを開き、別のオブジェクトを閉じて書き込みます。このようにして、複数のオブジェクトを適切に読み取ることができます。

        fileOutputStream = new FileOutputStream("abc.dat",true);
         outputBuffer = new BufferedOutputStream(fileOutputStream);
         objectStream = new AppendableObjectOutputStream(outputBuffer);
         BucketUpdate b1 = new BucketUpdate("getAllProducts1",null,"1",null);
         BucketUpdate b2 = new BucketUpdate("getAllProducts2",null,"2",null);
         BucketUpdate b3 = new BucketUpdate("getAllProducts3",null,"3",null);
         objectStream.writeObject(b1);
         objectStream.writeObject(b2);
         objectStream.writeObject(b3);
         objectStream.close();
    
4

2 に答える 2

5

各オブジェクトを書き込んだ後に ObjectOutputStream.reset() を呼び出すと、これが修正されます。

于 2011-07-07T05:31:23.873 に答える
4

あなたが言及した質問を確認すると、ファイルにすでにいくつかのオブジェクトが含まれている場合、オブジェクトをファイルに追加AppendableObjectOutputStreamするためだけに使用する必要があることがわかります。この場合、ヘッダーは先頭に書き込まれる必要があるため、空のファイルの場合は通常を使用する必要があります。ObjectOutputStream

于 2011-07-05T08:18:38.443 に答える