您是否知道在不關閉關聯套接字的情況下中斷Java InputStream
的讀取的方法?任何使用java.nio。*中斷InputStream的方法#read()不關閉套接字?
這裏是用於抓取一個插座輸入流並轉換爲可中斷DataInputStream所當前構建策略:
InputStream interruptibleInputStream = Channels.newInputStream(Channels.newChannel(m_ConnectionData.getSocket().getInputStream()));
DataInputStream myInterruptibleDIS = new DataInputStream(interruptibleInputStream);
這使得使用一個ReadableByteChannel
它提供了一個read(ByteBuffer)
方法與用於ClosedByInterruptException
拋出支持。
問題是調用read()
調用read()
調用線程上的中斷將導致底層套接字被關閉。
對於我的上下文,我需要套接字保持打開; read
調用正在等待用戶輸入未到來,所以我正在使用中斷將控制權交還給更高的組件,然後再次返回到read
。
如果有人能夠建議一種使用JDK內置類來實現此目的的方法,或者指出某些信息無法實現,我將不勝感激。
我知道還有其他的方法可以達到同樣的效果,但是我很好奇地知道這種方法是否可行。
你可以在套接字上使用`Selector`和`.select(int)`。 – fge 2011-12-13 19:24:32
在套接字上設置讀取超時。 – jtahlborn 2011-12-13 19:50:10