4

Java の InputStreamReader read() 関数を使用しています。入力ストリームの最後に到達すると、値が -1 の int 変数に入るはずですが、代わりにブロックされます。入力ストリームの最後に -1 がないのはなぜですか? (実際に入力の終わりであり、接続ソケットが有効であることを確認して、文字ごとにデバッグしました)。

次のようにして、ready() 関数を使用することで適切な解決策が得られます。

if (isr.ready())
    currCharVal = isr.read();

前もってありがとう、ガイ。

4

1 に答える 1

4

これは、相手側が接続を閉じていない場合に発生します。ソケットが閉じられると、read() は -1 を返します。

私の経験では、 ready と available を使用することはかなり予測できません。最後に到達するまで read(byte[]) し、終了したらもう一方の端が閉じることを期待します。

于 2012-01-21T15:18:50.587 に答える