Java 兴趣集为空的SelectionKey

Java 兴趣集为空的SelectionKey,java,select,nio,socketchannel,Java,Select,Nio,Socketchannel,我创建了一个抽象概念 公共接口频道 对于java.nio.channels.SelectableChannel,它提供了一个isdirectional方法和getter来检索写/读通道(可能相等,也可能不相等)。此通道和可能的多个其他实例与封装选择器的i/o调度程序一起使用 由于我希望进行非阻塞写入,因此调度器使用应写入相应通道的字节缓冲区填充多个队列,并在写入到期时将java.nio.channels.SelectionKey.OP_write添加到密钥的兴趣集 对于双向通道,这是一个简单的更

我创建了一个抽象概念

公共接口频道

对于
java.nio.channels.SelectableChannel
,它提供了一个
isdirectional
方法和getter来检索写/读通道(可能相等,也可能不相等)。此通道和可能的多个其他实例与封装选择器的i/o调度程序一起使用

由于我希望进行非阻塞写入,因此调度器使用应写入相应通道的字节缓冲区填充多个队列,并在写入到期时将
java.nio.channels.SelectionKey.OP_write
添加到密钥的兴趣集

对于双向通道,这是一个简单的更新操作,因为读通道(=写通道), 已被感兴趣地处理
OP_READ
。 如果通道是单向的,我必须获得写入通道(!=读取通道),并将其注册为感兴趣的
OP_write


问题

假设队列现在为空,则在执行写入操作后应该怎么做? 对于双向通道,我只需将兴趣设置重置为
OP\u READ

但是我应该如何处理单向通道,调用
key.interesttops(0)可以吗,它不违反方法的不变量

(ops&~channel().validOps())!=0

然后,(单向)写入通道的兴趣集将为空


简言之

如果我当前对选择键不感兴趣,那么
java.nio.channels.SelectionKey.interesttops(0)
调用是否正确?或者我应该取下钥匙

调用
key.interesttops(0)可以吗


是的,这完全可以。

这意味着您对该键的任何操作都不感兴趣,因此这将重置先前感兴趣的操作


这样做,就是告诉选择器暂时忽略此键。

我认为您的问题不清楚。它可能真的需要一个。例如,这些队列可能是您自己的代码,我真的不知道在您的代码中应该如何操作它们。尝试生成一个代码示例,它不使用队列或任何东西,只使用一个写入通道,并演示您关心的兴趣键。我添加了一个“简短”部分,希望现在更清楚。这不是关于队列,而是关于禁用给定选择器的通道。您能给出原因吗?调用key.interestTops(0)时会发生什么?它不在Java中docs@user1870400你能给出一个单独的理由来解释为什么它不好吗?世界上没有这样的说法。