0

私は現在、ObjectInputStream がクライアント Socket の入力ストリームに接続されている GZIPInputStream から直接読み取る単純なシステムをセットアップしています。

        InputStream stream = s.getInputStream();

        GZIPInputStream gis = new GZIPInputStream(stream);

        ObjectInputStream input = new ObjectInputStream(gis);
        System.out.println(input);

        return input;

これに関する問題は、ObjectInputStream がストリーム ヘッダーを読み取ろうとし、スレッドのブロックを開始することです。なぜこれが起こっているのですか?また、どうすればこれを防ぐことができますか?

4

1 に答える 1

0

InputStream read() は、データが利用可能になるか、ストリームの終わりが検出されるか、例外がスローされるまでブロックされます。メイン コード パスがブロックされないようにするには、バックグラウンド スレッドを使用して読み取りを行います。もちろん、バイトが使用可能になるまでバックグラウンド スレッドはブロックされます。予期しないブロックは、送信側の障害である可能性があります。

于 2012-03-10T07:19:30.017 に答える