Как определить свой собственный SelectableChannel?
Вопрос
Как бы я определил новый тип java.nio.channels.SelectableChannel
(скажем, для последовательных портов)?
Решение
Насколько я понимаю, реализация Java основана на Unix. select()
c (кажется, я помню, что реализация в Windows немного отличалась)
В зависимости от ОС (и аргументов JVM!) вызываются разные собственные функции ОС, но их объединяет то, что это собственный код - базовые функции не реализованы в Java.
Если вы хотите создать библиотеку, которая имеет доступ к select()
(или что-то подобное) базовой ОС (которая действительно использует дескрипторы файлов), я думаю, вы в значительной степени вынуждены использовать JNI.Я не верю, что есть какие-то способы обойти это.
Selector/SelectableChannel в Java на самом деле представляет собой анемичное подмножество того, что select()
сможет сделать.
Другие советы
Вы, вероятно, захотите продлить java.nio.channels.spi.AbstractSelectableChannel
для создания реализации, которая вам нужна.Если вы спрашиваете о чем-то другом, вам нужно задать более подробный вопрос.Исходный код JDK можно загрузить по нескольким различным лицензиям, в зависимости от того, какую версию вы загружаете.У вас есть возможность просмотреть реализации JDK (java.nio.channels.Channel
, java.nio.channels.SocketChannel
, и т. д.), чтобы полностью понять, что вам нужно реализовать.Однако если вы это сделаете, будьте осторожны и не копируйте код из исходного кода JDK, если только вы не можете соблюдать лицензию на загруженный вами исходный код.
Книга Ява НИО может помочь вам.