新しいタイプ(シリアルポートなど)をどのように定義し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()できることの貧弱なサブセットです。