Java 从选择器中删除键
我正在尝试实现NIO服务器,对SelectionKey有一个问题。假设我们提取了一些可以读取的密钥。像这样:Java 从选择器中删除键,java,nio,Java,Nio,我正在尝试实现NIO服务器,对SelectionKey有一个问题。假设我们提取了一些可以读取的密钥。像这样: SelectionKey key; //... SocketChannel c = (SocketChannel) key.channel; //read from c 但我们从通道中读取的数据不足以构成一个完整的数据包。所以我在钥匙上贴了一些东西 问题:我应该什么时候从选择器中取出钥匙?我什么时候看完整的包?或者每次我应该重新注册频道时,从选择器中删除键并将接收到的数据重新附加到新注
SelectionKey key;
//...
SocketChannel c = (SocketChannel) key.channel;
//read from c
但我们从通道中读取的数据不足以构成一个完整的数据包。所以我在钥匙上贴了一些东西
问题:我应该什么时候从选择器中取出钥匙?我什么时候看完整的包?或者每次我应该重新注册频道时,从选择器中删除键并将接收到的数据重新附加到新注册的SelectionKey
我应该什么时候从选择器中拔出钥匙
当您不再对其频道中的事件感兴趣时。这是罕见的。大多数情况下,您只需关闭频道,这会自动取消SelectionKey
我什么时候看完整的包
不,为什么
或者每次我需要重新注册频道时,从选择器中删除该键
不,为什么?如果您对从频道读取事件感兴趣,为什么在您关闭频道之前,这种兴趣会停止?除了对该频道进行短写之外,在这种情况下,您当然应该停止对阅读它感兴趣:但您可以通过如下操作interesttop来实现这一点
并将接收到的数据重新附加到新注册的SelectionKey
我不知道这意味着什么。实际上没有理由为现有频道注册新的SelectionKey。只要玩弄一下它的趣味性,如果你出于某种原因根本不感兴趣的话,可以将它们设置为零