Java中的阻塞套接字写入和非阻塞套接字写入有什么区别?

时间:2013-03-07 20:03:33

标签: java sockets real-time nio nonblocking

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

现在阻止写入怎么样?什么时候阻止?当你打电话给同花?当你在OutputStream上调用write时?它是否会阻塞,直到底层写入套接字缓冲区中有空间?或者如果它不能写,它会抛出异常吗?

1 个答案:

答案 0 :(得分:2)

是的,它会阻塞,直到底层操作系统套接字发送缓冲区中有足够的空间来复制你的字节。当你将数据放入与套接字关联的Java OutputStream时,或者当你调用{ {1}},以调用实际flush()系统调用为准。