将键添加到选定的键集

我正在编写一个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添加到密钥,然后将密钥添加到Selected-keys set ,然后在密钥出现在选定集中时将一些内容写入通道。

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

你不能。 来自Javadoc:

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

您只能从中删除密钥。

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