3

現在、ObjecInputStreamから読み取るためにを使用していますが、次のSocket単純なコードを使用するとすべて正常に動作します。

ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
Object response = input.readObject();

ここで、ストリームを閉じずに読み取りをキャンセルして、後で再度読み取ることができるようにしたいと考えています。出来ますか?

編集:プログラムフローをブロックしているという理由だけで、読み取りをキャンセルしたい。同じ情報を 2 回読む必要はありません。別のリクエストを送信してから(別の)レスポンスを読み取れるように、キャンセルしたいだけです。

4

3 に答える 3

2

ObjectInputStream.markSupported()返されるものを参照してください。が返された場合はtrueObjectInputStream.mark()最初に を呼び出しObjectInputStream.reset()てから、 を呼び出してマークした場所まで巻き戻し、InputStream後で再利用できます。

于 2009-11-25T04:38:39.787 に答える
2

これを行うには、 PushBackInputStreamを使用できます。いくつかのバイトを読み取った後、バイトを読み取ることができます。

于 2009-11-25T04:39:26.540 に答える
2

ある種の「メイン」スレッドがある場合は、それから I/O を実行する必要があります。読み取り専用のスレッドと、入力の処理を拡張するスレッドを用意します。イベント ベースの場合は結果をメイン スレッドのキューに入れ、共有状態の設計を使用している場合はモデルを変更します。

于 2009-11-25T07:31:29.750 に答える