3

ノンブロッキング読み取りとブロッキング読み取りの違いは明らかですが、書き込みについては混乱しています。ノンブロッキング書き込みがブロックされないことを理解しています(当たり前!)。基になるソケット バッファーがいっぱいの場合、バイトは単純に書き込まれません。そのため、channel.write を呼び出すときに書き込まれたバイト数を確認することが重要です。

書き込みをブロックするのはどうですか?いつブロックされますか?フラッシュを呼び出すときは?その OutputStream で write を呼び出すと? 基になる書き込みソケット バッファーにスペースができるまでブロックしますか? または、書き込みできない場合は例外をスローしますか?

4

1 に答える 1

2

OutputStreamはい。基になるOSソケット送信バッファーにバイトをコピーするのに十分なスペースができるまでブロックします。これは、ソケットに関連付けられたJavaにデータを入れているとき、またはflush()実際のwrite(2)システムコールを呼び出すときに発生する可能性があります。

于 2013-03-07T20:12:38.827 に答える