使用NIO DatagramChannel将我需要处理部分的读/写数据包?
题
当使用的SocketChannel,需要保留的读写缓冲器来处理部分写入和读取。
我有一种挥之不去的怀疑,使用DatagramChannel时候可能并不需要,但信息是稀缺的。
怎样的故事?
我应该叫(非阻塞)接收(ByteBuffer的),直到我得到一个空回读所有等待数据报?
当在非阻塞模式下发送,我可以依靠发送(ByteBuffer的,为SocketAddress)要么发送整个缓冲区或完全拒绝它,或我需要以可能保持部分写入缓冲器?
解决方案
一个数据报的每一个读出的是整个数据报,不多也少。有一个提示,它是此在java.nio.DatagramChannel.read的说明的情况下:
如果有在多个字节 数据报比保持在给定的 缓冲区那么的剩余 数据报被丢弃
当你处理一个SocketChannel的,这是一个信息流;谁也不能保证你会少的数据多少或如何获得每个读,因为TCP是重组单独的数据包重新从对方的消息。但对于UDP(这是你与DatagramChannel读什么)每个数据包是自己的原子消息。
不隶属于 StackOverflow