2011-01-08 4 views
1

Я пытаюсь переписать библиотеку Python в Java. Мне было интересно, доступен ли какой-либо пакет java, который аналогичен модулю select, доступному в Python.выберите пакет в Java

http://docs.python.org/library/select.html

Я был передан в НИО пакет, но мне было интересно, если там был slighly более похожая реализация Java.

+1

У Java нет эквивалента 'select()' или 'poll()'. Таким образом, вы застряли с NIO. – chrisaycock

+2

Возможно, вы могли бы сказать, что вы пытаетесь сделать. Существует множество вариантов/фреймворков для такого рода вещей. –

+0

Потоки Java очень легкие в Java 6. Часто один поток на источник - это самый простой способ обработки нескольких потоков. –

ответ

6

Если вы не желаете написать обертку JNI для , то выберите (2) самостоятельно или можете найти ее в сети. (Я смотрел кратко, и я его не нашел). Это, вероятно, будет очень интересной задачей, если вы хотите поддержать идею Java открытого файла (например, сопоставить Java InputStream в файловом дескрипторе Unix) ,

Предпочтительный способ сделать это на Java, как вы отметили, - java.nio. nio действительно имеет некоторые ограничения. Наибольшая разница между nio и выбирает (2), кроме отличий API, заключается в том, что nio будет мультиплексировать только через сетевые сокеты. Например, вы не можете использовать его для многозадачности открытых файлов.

+0

Я был бы очень удивлен, если бы множественный выбор файлов был бы более эффективным, чем использование нескольких потоков для чтения по одному файлу. –

+0

Это зависит от приложения. Это также зависит от того, насколько много вы должны делать. Если вам приходится обрабатывать значительное количество открытых сокетов, вы, например, столкнетесь с проблемами с потоками. Темы не масштабируются, а также параллельная модель, которая использует 'nio' и' java.util.concurrent'. –

1

Не уверен, что это сработает для вас, но вы можете попробовать Jython вместо того, чтобы переписывать его в java.

+0

Это справедливый вопрос. Модуль [Jython select module] (http://wiki.python.org/jython/SelectModule) тесно связан с интерфейсом модуля CPython * select *, хотя он основан на каналах Java, поэтому он работает только в сетевых сокетах, nio'. –