如何定义自己的SelectableChannel?

时间:2009-05-26 17:15:53

标签: java nio

我如何定义新类型java.nio.channels.SelectableChannel(比如串口)?

2 个答案:

答案 0 :(得分:3)

我的理解是java实现基于unix select() c函数(我似乎记得Windows实现略有不同)

取决于OS(和JVM args!),调用不同的本机OS函数,但它们的共同点是它的本机代码 - 基本功能不是用Java实现的。

如果你想创建一个访问底层操作系统的select()(或类似)的lib(确实依赖于文件句柄),我认为你几乎被迫使用JNI。我不相信有任何方法可以解决它。

Java中的Selector / SelectableChannel实际上是select()可以做的贫血的子集。

答案 1 :(得分:2)

您可能希望扩展java.nio.channels.spi.AbstractSelectableChannel以创建所需的实现。如果您要求不同的东西,您需要提供更详细的问题。 JDK源代码可以在几个不同的许可证下下载,具体取决于您下载的版本。您可以选择查看JDK实现(java.nio.channels.Channeljava.nio.channels.SocketChannel等...)以完全了解您需要实现的内容。但是,如果这样做,请注意不要从JDK源代码复制代码,除非您可以遵守您下载的源代码的许可证。

本书Java NIO可能会对您有所帮助。