Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中阻塞套接字写入和非阻塞套接字写入的区别是什么?_Java_Sockets_Real Time_Nio_Nonblocking - Fatal编程技术网

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

Java中阻塞套接字写入和非阻塞套接字写入的区别是什么?,java,sockets,real-time,nio,nonblocking,Java,Sockets,Real Time,Nio,Nonblocking,非阻塞读取和阻塞读取之间的区别是显而易见的,但我对写入感到困惑。我知道非阻塞写入从不阻塞(duh!)。如果底层套接字缓冲区已满,则字节不会写入其中。这就是为什么在调用channel.write时检查写入了多少字节很重要 现在,阻止写入如何?什么时候封锁?你什么时候叫同花顺?当您在其输出流上调用write时?它是否会一直阻塞,直到底层写套接字缓冲区中有空间为止?或者,如果无法写入,它是否会引发异常?是的,它会阻塞,直到底层操作系统套接字发送缓冲区中有足够的空间来复制字节。当您将数据放入与套接字关联

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


现在,阻止写入如何?什么时候封锁?你什么时候叫同花顺?当您在其输出流上调用write时?它是否会一直阻塞,直到底层写套接字缓冲区中有空间为止?或者,如果无法写入,它是否会引发异常?

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

还有异步写入…@我认为不可替换的异步写入是非阻塞写入。不准确。这三种模式彼此有很大的不同。@unjutable异步写入和非阻塞写入之间有什么区别?异步写入是否以某种方式提供回调?我在Java中从未见过这种情况。你有一个例子的链接吗?哼,所以没有办法知道调用flush()是否会花费很长时间?那太糟糕了。。。问题是,没有办法使套接字写不阻塞,同时在读时保持阻塞,对吗?不,两者都是一个二进制开关。