Java nio SelectionKey.register 和 interestops

Java nio SelectionKey.register and interestops

我一直致力于 Java NIO 通信并阅读了与此相关的各种文章。该文件说我可以 "or" 我感兴趣的操作。但是,我还没有看到一个

的例子
channel.register(selector,SelectionKey.OP_ACCEPT|SelectionKey.OP_READ|Selection.OP_WRITE)

这是个坏主意吗?

是的。错了。

  1. 唯一能让你获得 OP_ACCEPT 的是 ServerSocketChannel.
  2. 唯一能让您获得 OP_READ 或 OP_WRITE 的是 SocketChannel or a DatagramSocketChannel.
  3. 因此,单个频道无法为您提供所有这三个事件。所以全部注册是没有意义的。
  4. OP_WRITE 几乎随时准备就绪。同时注册 OP_READ 和 OP_WRITE 几乎没有意义。

validOps() 方法告诉您哪些操作对给定通道有效,而不是您应该在运行时知道。