使用NIO DatagramChannel我需要处理部分读/写数据包吗?

Nuo*_*oji 3 java sockets datagram

使用SocketChannel时,需要保留读写缓冲区来处理部分写入和读取.

我怀疑在使用DatagramChannel时可能不需要它,但信息很少.

这是什么故事?

我应该反复调用(非阻塞)接收(ByteBuffer),直到我得到一个空值来读取所有等待的数据报吗?

当以非阻塞模式发送时,我可以依靠send(ByteBuffer,SocketAddress)发送整个缓冲区或完全拒绝它,还是我需要保留部分写入的缓冲区?

Jar*_*aus 5

每次读取数据报都是整个数据报,仅此而已.有一个提示,这是java.nio.DatagramChannel.read的描述中的情况:

如果数据报中的字节数多于保留在给定缓冲区中的字节数,则静默丢弃数据报的其余部分

当你处理SocketChannel时,它是一个消息流; 由于TCP正在重新组合单独的数据包以重新创建来自另一方的消息,因此无法保证每次读取都会获得多少或多少数据.但对于UDP(这是您使用DatagramChannel读取的内容),每个数据包都是它自己的原子消息.