Kom*_*ave 9 java sockets nio interrupt
您是否知道在InputStream不关闭相关套接字的情况下中断Java读取的方法?
以下是抓取套接字输入流并转换为可中断DataInputStream的当前构造策略:
InputStream interruptibleInputStream = Channels.newInputStream(Channels.newChannel(m_ConnectionData.getSocket().getInputStream()));
DataInputStream myInterruptibleDIS = new DataInputStream(interruptibleInputStream);
Run Code Online (Sandbox Code Playgroud)
这使用了一个ReadableByteChannel提供read(ByteBuffer)支持ClosedByInterruptExceptionthrowable的方法.
问题是,调用线程使一个中断read()的电话DataInputStream的原因底层套接字被关闭.
对于我的上下文,我需要套接字保持打开状态; 该read调用正在等待未来的用户输入,因此我正在使用中断将控制权传递回更高的组件,然后最终read再次返回.
如果有人能够建议使用JDK内置类来实现这一目标,或者可能指出某些信息无法实现,我将非常感激.
我知道还有其他方法可以达到同样的效果,但我很想知道这种方法是否可行.
如果在读取期间中断 InterruptibleChannel,它将被关闭并抛出 ClosedByInterruptException。如果你只是想要读取超时,则根本不使用通道,只需使用常规 Socket;调用 Socket.setSoTimeout() 并设置较短的超时时间,并在每次超时触发时检查线程的 isInterrupted() 状态。更好的是,检查您中断线程的要求。那个有什么用途?