2017-05-04 6 views
0

を読んだとき、なぜ反復処理を停止しない:ストリームを読み込むときに0バイトがストリームからの読み取り標準イディオムがEOFをチェックするために(-1)である

while((bytesRead = inputStream.read(buffer)) != -1) 

これはかなり標準のようだ - 私は、人気のソースをチェックしますApache Commonsのようなライブラリであり、デファクトスタンダードと思われます。

なぜ私たちも0で止まらないのですか? > -1は良くないでしょうか?私たちが何も読んでいないときに、どんな仕事がループに入っているのですか?

答えて

2

基本的に無意味なので、 bの長さがゼロの場合

、その後、何のバイトが読み込まれず、0が返されます。:documentationを見てくださいそれ以外の場合は、少なくとも1バイトを読み取ろうとしています。ストリームがファイルの最後にあるために使用可能なバイトがない場合、値-1が返されます。それ以外の場合は、少なくとも1バイトが読み取られてbに格納されます。だから、

あなたは(基本的にほとんどすべての場合にはバグである、私は個人的にはこの方法が、その場合には例外をスローしてほしい)空のバッファに渡していない限り、戻り値は0になることはありません。少なくとも1バイト読み込み(この場合は戻り値が1以上)、またはストリームの最後に到達するのをブロックします(この場合、戻り値は-1になります)。

+0

最後のビットは "この場合、戻り値は-1になるでしょうか?" – VGR

+0

@VGR:うわー、はい - 修正:) –

関連する問題