Java nio SelectionKey.register和interestops

时间:2015-09-07 09:08:14

标签: java sockets nio socketchannel

我一直致力于Java NIO通信并阅读有关此内容的各种文章。该文件说我可以“或”操作我感兴趣的。但是,我还没有看到一个例子

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

这是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

是的。这是错的。

  1. 唯一可以为您提供OP_ACCEPT的是ServerSocketChannel.
  2. 唯一可以为您提供OP_READ或OP_WRITE的是SocketChannel or a DatagramSocketChannel.
  3. 因此,单个频道无法为您提供所有这三个事件。所以注册这些都没有任何意义。
  4. OP_WRITE几乎总是准备就绪。在同一时间注册OP_READ和OP_WRITE很少有意义。
  5. validOps()方法告诉您哪些操作对给定通道有效,而不是您在运行时需要知道的。