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