2009-04-19 56 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通道,就像它应该是这样。

最后,我问,有没有计划解决这个泛型重用。