将键添加到选定的键集

时间:2017-06-19 10:04:23

标签: java selector nio

我正在编写NIO服务器,并希望根据用户请求做出响应,即将一些数据写入频道。

Selector selector;
//...
if(selector.selectNow() != 0){
    if(key.isReadable()){
        SocketChannel channel = key.channel();
        //read some data
        //respond
        key.interestOps(SelectionKey.OP_WRITE)
        //How to add the key to a selected set?
    }
}

在阅读了一些我想回复的数据之后。这意味着我需要将OP_WRITE添加到密钥,然后将密钥添加到 所选密钥集 ,然后在密钥出现后将一些内容写入频道在一个选定的集合中。

如何明确地将键添加到选定的组?

1 个答案:

答案 0 :(得分:2)

你做不到。来自Javadoc:

  

密钥可能无法直接添加到选定密钥集。

您只能从中删除密钥。

但你不需要这些。如果你想写,只写和当且仅当写返回零时,注册OP_WRITE的通道并返回到选择循环。当频道变为可写时,它将自动添加到所选的键集中。您无需等待OP_WRITE进行初始写入。