将密钥添加到选定的密钥集
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 进行初始写入。
我正在编写一个 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 进行初始写入。