Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
如何在JavaNIO中刷新SocketChannel?_Java_Nio - Fatal编程技术网

如何在JavaNIO中刷新SocketChannel?

如何在JavaNIO中刷新SocketChannel?,java,nio,Java,Nio,在Java IO中,OutputStream可以使用flush()方法来确保立即发送数据 JavaNIO中是否有相应的函数?据我所知,有一种force()方法用于FileChannel刷新数据 可能是一个很幼稚的问题 袜子通道不能冲洗。您必须检查数据是否已完全发送。当您强制()将数据写入磁盘时,操作系统可以确定数据已成功写入磁盘。然而,TCP通信更加复杂,数据在操作系统控制之外经过许多阶段。一般来说,操作系统将尽快结束数据,并且不会将套接字数据(通常约64 KB)缓冲到它将缓冲磁盘写入的程度(有

在Java IO中,
OutputStream
可以使用
flush()
方法来确保立即发送数据

JavaNIO中是否有相应的函数?据我所知,有一种
force()
方法用于
FileChannel
刷新数据


可能是一个很幼稚的问题

袜子通道不能冲洗。您必须检查数据是否已完全发送。

当您强制()将数据写入磁盘时,操作系统可以确定数据已成功写入磁盘。然而,TCP通信更加复杂,数据在操作系统控制之外经过许多阶段。一般来说,操作系统将尽快结束数据,并且不会将套接字数据(通常约64 KB)缓冲到它将缓冲磁盘写入的程度(有时为GB)

确保成功接收数据的最佳方法是让另一端发送响应

如果您希望尽快发送数据,您可以尝试关闭nagle,但是大多数操作系统在优化这一点上都非常聪明,关闭它并没有使用时有多大区别。

OutputStream.flush()除了刷新堆栈中任何
BufferedOutputStream
s或
ObjectOutputStream
s或
PrintStream
s的缓冲区外,不执行任何操作

具体来说,它不做任何与
FileChannel.force()
getFD().sync()
对应的事情。它只是将流缓冲区从JVM刷新到内核中的套接字发送缓冲区(在本例中)


SocketChannel.write()。因此,没有要刷新的内容,因此没有刷新操作。

是的。但那是FileChannel的,对吗?我需要与SocketChannel相同的功能。SocketChannel不能冲洗。您必须检查数据是否已完全发送。谢谢。这也是帮助:)。顺便说一句,请推荐一些链接或书籍来了解JavaNIO。再次感谢!我主要使用Java API文档-请看您的回复?这是你的答复。也错了,谢谢!了解有关NIO的更多信息:-)