当使用的SocketChannel,需要保留的读写缓冲器来处理部分写入和读取。

我有一种挥之不去的怀疑,使用DatagramChannel时候可能并不需要,但信息是稀缺的。

怎样的故事?

我应该叫(非阻塞)接收(ByteBuffer的),直到我得到一个空回读所有等待数据报?

当在非阻塞模式下发送,我可以依靠发送(ByteBuffer的,为SocketAddress)要么发送整个缓冲区或完全拒绝它,或我需要以可能保持部分写入缓冲器?

有帮助吗?

解决方案

一个数据报的每一个读出的是整个数据报,不多也少。有一个提示,它是此在java.nio.DatagramChannel.read的说明的情况下:

  

如果有在多个字节   数据报比保持在给定的   缓冲区那么的剩余   数据报被丢弃

当你处理一个SocketChannel的,这是一个信息流;谁也不能保证你会少的数据多少或如何获得每个读,因为TCP是重组单独的数据包重新从对方的消息。但对于UDP(这是你与DatagramChannel读什么)每个数据包是自己的原子消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top