Nio Selector.select IO 就绪

Nio Selector.select IO readiness

在 java NIO 中,Selector.select() 是否保证至少有一个完整的 UDP 数据报内容在套接字通道上可用,或者理论上 Selector 可以在少于一个数据报时唤醒, 说几个字节 ?

如果传输协议是 TCP 会发生什么,关于 Selector.select(),与 UDP 有区别吗?

来自API: 选择一组键,其对应通道 已准备好进行 I/O 操作。

但是它没有具体说明准备就绪的含义。

所以我的问题:

It doesn't however specify what ready means.

So my questions:

  • how incoming packages/streams go from hardware to Java application Socket (Channels).

它们到达缓冲的 NIC,然后传递到网络协议栈,然后从那里传递到套接字接收缓冲区。当您调用 read().

时,会从那里检索它们
  • when using UDP or TCP client, should one assume that at least one package is received

你的意思是数据包。实际上在UDP的情况下你的意思是数据报。你可以假设整个数据报已经收到UDP的情况。

or Selector could wake when there is only a part of [packet] available?

在 TCP 的情况下,您可以假设 或者 至少一个字节 流的结尾是可用的。在 TCP 级别没有 'package' 或 'packet' 或 'message' 这样的东西。