5

我将如何定义一种新的类型java.nio.channels.SelectableChannel(比如串行端口)?

4

2 回答 2

2

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

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

于 2009-05-26T19:11:05.063 回答
1

我的理解是java实现是基于unix select()c函数的(我好像记得windows的实现略有不同)

根据操作系统(和 JVM 参数!)调用不同的本机 OS 函数,但它们的共同点是它是本机代码 - 基本功能未在 Java 中实现。

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

Java 中的 Selector/SelectableChannel 确实是一个乏善可陈的子集select()

于 2009-05-27T22:18:42.813 回答