1

単一の異なるクラスの複数のシリアライズ可能なオブジェクトを送信しようとしています

ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

しかし、私はいつも

java.io.StreamCorruptedException: 無効な型コード: AC

フォーラムを見て試してみout.reset()ましたが、うまくいかないようです。私は何か間違っているか、何かが欠けていますか?

助けてください

4

2 に答える 2

2

破損しているのはストリームであり、ObjectOutputStream. それはクラスの名前です。

ObjectOutputStreamsこの問題は、複数の結果を単一の で読み取ろうとすると発生しますObjectInputStream。有効ではありません。ObjectOutputStream- で始まるヘッダーを書き込みます。0xAC。そのため、 singleObjectInputStreamを使用して multiple によって作成されたストリームを読み取るObjectOutputStreamsと、予期しない 0xAC が検出され、その例外がスローされます。

解決策: そうしないでください。ObjectOutputStreams複数をファイルに追加することはできず、最後に中断したストリーム内の正確なポイントでObjectOutputStreams新しいを作成するのに十分な特別な調整がない限り、ソケット上で複数を使用することはできません。代わりに、使用する必要があります同じで、ソケットの寿命の間。ObjectInputStreamObjectOutputStreamObjectInputStreamObjectOutputStream

于 2012-04-25T10:05:25.483 に答える
1

ObjectOutputStream または ObjectInputStream を誤って使用している可能性があります。

よくある間違いには次のものがあります。

  • 同じ基になるストリームで複数のオブジェクト ストリームを使用します。1つだけ使用してください。
  • Object Stream と、Writer/Reader や DataInput/OutputStream などの別のストリーム ラッパーを使用します。

ところで: ObjectInputStream を使用する前に、常に最初に ObjectOutputStream を作成し、flush() する必要があります。

于 2012-04-25T10:23:39.767 に答える