2012-03-09 1 views
0

私は現在のObjectInputStreamは、クライアントソケットの入力ストリームに取り付けられるGZIPInputStreamから直接読み出す場合に設定単純なシステムを有する:GZIPと組み合わせてObjectInputStreamを使用すると、なぜO.I.S.スレッドをブロックしますか?

 InputStream stream = s.getInputStream(); 

     GZIPInputStream gis = new GZIPInputStream(stream); 

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

     return input; 

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

+1

これは役に立ちますか? http://home.comcast.net/~cgokey/java/zlib/index.html。助けようとするだけです。それとHaventは演奏した。 –

+0

これまでのところすごくいいですね、リンクありがとう! – MagiSun

答えて

0

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

+0

ヘッダーがGZIPInputStreamによって圧縮解除されていないため、ブロックされているのはObjectInputStreamです。 :/ – MagiSun

関連する問題