3

非阻塞读取和阻塞读取之间的区别很明显,但我对写入感到困惑。我知道非阻塞写入永远不会阻塞(呃!)。如果底层套接字缓冲区已满,则根本不会向其中写入字节。这就是为什么在调用 channel.write 时检查写入了多少字节很重要的原因。

现在如何阻止写入?什么时候阻塞?当你叫冲洗?当你在它的OutputStream上调用write?它会阻塞直到底层写入套接字缓冲区中有空间吗?或者如果它不能写,它会抛出异常吗?

4

1 回答 1

2

是的,它确实会阻塞,直到底层操作系统套接字发送缓冲区中有足够的空间来复制您的字节。当您将数据放入OutputStream与套接字关联的 Java 中时,或者当您调用 时flush(),可能会发生这种情况,以调用实际write(2)系统调用为准。

于 2013-03-07T20:12:38.827 回答