【问题标题】:NIO - How to make SelectionKey to be interested in NO optsNIO - 如何使 SelectionKey 对 NO opts 感兴趣
【发布时间】:2013-06-11 07:17:49
【问题描述】:

如何让java.nio.channels.SelectionKey 对 NO opts 感兴趣?

SelectionKey#cancel()有可能,但不是很好,因为它使密钥无用。

SelectionKeyinterestOps 常量; OP_ACCEPTOP_CONNECTOP_READOP_WRITE,但不是 OP_NOTHING。 那么拨打SelectionKey#interestOpts(**0**)合法操作吗?

这是一个例子。

for(;;) {
    selector.select();
    for (Iterator<SelectionKey> it = selector.selectedKeys().iterator();
            it.hasNext();) {
        SelectionKey key = it.next(); it.remove();
        key.interestOps(0);     // interested in no opts.

        // another thread handles socket...
        worker.handle();
    }
    updateKeys();     // if the worker completes handling,
                      // other interestOpts are set...
}

到目前为止,此代码对我有效,但我怀疑调用 SelectionKey#interestOpts(0) 是否合法。 或者您能告诉我您的最佳做法吗?

【问题讨论】:

  • 是的,0 是这样做的。

标签: java selector nio


【解决方案1】:

我怀疑调用 SelectionKey#interestOpts(0) 是否合法

为什么? Javadoc 中的什么地方这么说的?

这是完全合法的。您已经回答了自己的问题。

【讨论】:

  • 我明白你的问题。
  • 因为 Javadoc 没有提到它。我认为设置位和清除位之间存在很大差异。 SelectionKey 和周围的类没有这样的方法来清除位,此外,Javadoc 也没有提到它。所以我很困惑怎么办。
  • 错误,Javadoc 说“将此键的兴趣集设置为给定值”。不排除零。如果你的问题不是它是否合法,而是如何去做,你已经自己回答了。这没有多大意义。
  • 很抱歉,我无法理解您的意思。我想知道让SelectionKey 对没有选择感兴趣的合法方式。
  • 很抱歉,我无法理解您所说的“无法理解您的意思”到底是什么意思。我现在已经两次告诉你,你问的是合法的。这就是您问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多