2009-04-19 84 views
1

我想用超時讀取java.io.InputStream。顯然,正確的方法是使用java.nio.channels.SelectableChannel和java.nio.channels.Selector。不幸的是,現在還不清楚如何從InputStream轉換到SelectableChannel。如何從InputStream獲取SelectableChannel?

InputStream的是來自非傳統來源未來 - http://java.sun.com/products/javacomm/reference/api/javax/comm/CommPort.html#getInputStream()

+2

對不起,吉利,這不會與javax.comm。您可能會破解rxtx項目來實現您自己的可選頻道......但是除非您嘗試與已與任何* SelectableChannel一起使用的軟件包進行集成,否則這可能比獲取非阻塞串行I所需的更多工作/ O。 – erickson 2009-04-19 20:10:08

回答

2

並非所有InputStream s的保證是可選的,所以沒有簡單的方法來做到這一點。不幸的是,CommPort類沒有返回SelectableChannel的方法;沒有簡單的便攜式方法來實現這一點(即,沒有完全破壞封裝)。

1

NIO在這方面被打破。你只需要在代碼中查看一下,看看所有需要通道的轉換爲SocketChannel等等。不可能在NIO中重用任何其他類型的基於文件描述符的I/O通道,就像它應該是這樣。

最後,我問,有沒有計劃解決這個泛型重用。