1

Java NIO を使用してソケット操作を行っています。過去にストリームを操作する場合、read呼び出し (バイト配列、この場合は a にByteBuffer読み込む) は、ストリームから読み取ったバイト数を返すか、ストリームが閉じられている場合は -1 を返します。だからあなたは基本的にできる

while(channel.read(buffer) != -1){
  //do stuff
}

ただし、サーバーを停止していることに気付きました。read()いくつかのログ ステートメントを追加したときに、呼び出しがストリームの最後に -2 を返していることに気付きました。ドキュメントによると:

戻り値: 読み取られたバイト数、場合によってはゼロ、またはチャネルがストリームの終わりに達した場合は -1

誰もこれを経験したことがありますか?値 >0 でループするようにコードを変更しましたが、何が起こっているのかを理解したいと思っていました。

4

0 に答える 0