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