将密钥添加到选定的密钥集

Add key to a selected keys set

我正在编写一个 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?
    }
}

看完一些资料我想回复一下。这意味着我需要在key中添加OP_WRITE然后在Selected-keys set中添加key然后写一些内容到一旦密钥出现在选定集中的频道。

如何将密钥显式添加到选定集?

你不能。来自 Javadoc:

Keys may not be added directly to the selected-key set.

您只能从中删除密钥。

但你不需要这些。想写就写,当且仅当写return为零,注册OP_WRITE和return的通道即可select 循环。当通道变得可写时,它将被添加到自动设置的 selected 键中。您无需等待 OP_WRITE 进行初始写入。