新しいタイプ(シリアルポートなど)をどのように定義しjava.nio.channels.SelectableChannel
ますか?
2 に答える
おそらくjava.nio.channels.spi.AbstractSelectableChannel
、必要な実装を作成するために拡張する必要があります。別のことを求めている場合は、より詳細な質問をする必要があります。JDK ソース コードは、ダウンロードするバージョンに応じて、いくつかの異なるライセンスでダウンロードできます。実装する必要があるものを完全に理解するために、JDK 実装 ( 、 など...) を表示するオプションがありますjava.nio.channels.Channel
。java.nio.channels.SocketChannel
ただし、これを行う場合は、ダウンロードしたソース コードのライセンスに従うことができない限り、JDK ソースからコードをコピーしないように注意してください。
本Java NIOが役立つかもしれません。
私の理解では、Java の実装は unix の c 関数に基づいていselect()
ます (Windows の実装は少し異なっていたことを覚えているようです)。
OS (および JVM 引数!) に応じて、さまざまなネイティブ OS 関数が呼び出されますが、それらに共通しているのは、それがネイティブ コードであることです。基本的な機能は Java では実装されていません。
基礎となる OS (実際にはファイルハンドルに依存している) の (または類似の)ライブラリにアクセスするライブラリを作成したい場合はselect()
、JNI を使用することを余儀なくされていると思います。それを回避する方法はないと思います。
Java の Selector/SelectableChannel は、実際にselect()
できることの貧弱なサブセットです。