Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从选择器中删除键_Java_Nio - Fatal编程技术网

Java 从选择器中删除键

Java 从选择器中删除键,java,nio,Java,Nio,我正在尝试实现NIO服务器,对SelectionKey有一个问题。假设我们提取了一些可以读取的密钥。像这样: SelectionKey key; //... SocketChannel c = (SocketChannel) key.channel; //read from c 但我们从通道中读取的数据不足以构成一个完整的数据包。所以我在钥匙上贴了一些东西 问题:我应该什么时候从选择器中取出钥匙?我什么时候看完整的包?或者每次我应该重新注册频道时,从选择器中删除键并将接收到的数据重新附加到新注

我正在尝试实现NIO服务器,对SelectionKey有一个问题。假设我们提取了一些可以读取的密钥。像这样:

SelectionKey key;
//...
SocketChannel c = (SocketChannel) key.channel;
//read from c
但我们从通道中读取的数据不足以构成一个完整的数据包。所以我在钥匙上贴了一些东西

问题:我应该什么时候从选择器中取出钥匙?我什么时候看完整的包?或者每次我应该重新注册频道时,从选择器中删除键并将接收到的数据重新附加到新注册的SelectionKey

我应该什么时候从选择器中拔出钥匙

当您不再对其频道中的事件感兴趣时。这是罕见的。大多数情况下,您只需关闭频道,这会自动取消SelectionKey

我什么时候看完整的包

不,为什么

或者每次我需要重新注册频道时,从选择器中删除该键

不,为什么?如果您对从频道读取事件感兴趣,为什么在您关闭频道之前,这种兴趣会停止?除了对该频道进行短写之外,在这种情况下,您当然应该停止对阅读它感兴趣:但您可以通过如下操作interesttop来实现这一点

并将接收到的数据重新附加到新注册的SelectionKey

我不知道这意味着什么。实际上没有理由为现有频道注册新的SelectionKey。只要玩弄一下它的趣味性,如果你出于某种原因根本不感兴趣的话,可以将它们设置为零