Как определить свой собственный SelectableChannel?

StackOverflow https://stackoverflow.com/questions/911780

  •  06-09-2019
  •  | 
  •  

Вопрос

Как бы я определил новый тип 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, если только вы не можете соблюдать лицензию на загруженный вами исходный код.

Книга Ява НИО может помочь вам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top