我正在编写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
添加到密钥,然后将密钥添加到 所选密钥集 ,然后在密钥出现后将一些内容写入频道在一个选定的集合中。
如何明确地将键添加到选定的组?
答案 0 :(得分:2)
你做不到。来自Javadoc:
密钥可能无法直接添加到选定密钥集。
您只能从中删除密钥。
但你不需要这些。如果你想写,只写和当且仅当写返回零时,注册OP_WRITE的通道并返回到选择循环。当频道变为可写时,它将自动添加到所选的键集中。您无需等待OP_WRITE进行初始写入。