【问题标题】:Java - Interrupting I/O without closingJava - 在不关闭的情况下中断 I/O
【发布时间】:2011-06-20 05:14:29
【问题描述】:
我正在用 Java 编写一个国际象棋程序。 GUI 应该能够与支持Chess Engine Communication Protocol 的国际象棋引擎通信。但是我在协调协议与 Java 的 I/O 设施时遇到了一些困难。
因为早于协议版本 2 的引擎不发送“功能”,xboard 使用超时机制:当它第一次启动引擎时,它会发送“xboard”和“protover N”,然后在两秒钟之前监听功能命令发送任何其他命令。
Java 用于中断 I/O 操作的功能似乎是有限的。我能找到的唯一选择是 NIO 的InterruptibleChannel,它在被中断时会自行关闭。
我不想在超时发生时关闭流——我只想中断读取。有谁知道解决办法吗?
【问题讨论】:
标签:
java
io
nio
interrupt
【解决方案1】:
我认为你可能想多了这个问题。你不需要在 2 秒后中止 read() 调用,你只需要你的支持逻辑来理解 2 秒后它不应该期望收到任何“功能”命令。然后您的实现可以编写下一个命令,而您的 read() 将返回该命令响应中的字节。
无论如何,我都是这样处理它的,通过使用以字节为单位读取的通用代码并将它们进一步传递到可以完成特定于上下文的处理的链上。那么就不需要中断读取,上游代码只需要明白它最终取回的数据可能是“特征”命令,也可能不是。
【解决方案2】:
我不清楚你需要做很多事情。您引用的是板子的超时行为。您不必实现它,它在板子上完成,即对等端,即另一端。