Потоки ввода / вывода Java для безымянных каналов, созданных в собственном коде? - PullRequest
1 голос
/ 07 июня 2010

Есть ли способ легко создавать потоки ввода / вывода Java для безымянных каналов, созданных в собственном коде?

Мотивация : Мне нужна собственная реализация класса Process. Нативный код порождает мне новый процесс с потоками ввода-вывода подпроцесса, перенаправленными на неназванные каналы.

Проблема : дескрипторы файлов для правильных концов этих каналов попадают в Java. В этот момент я застреваю, так как не могу создать новый FileDescriptor, который мог бы передать потоку FileInput / FileOutput.

Я использовал рефлексию, чтобы обойти проблему и установил связь с простым подпроцессором подпрыгивания. Однако у меня есть представление, что это не самый чистый путь. Вы использовали этот подход? Видите ли вы какие-либо проблемы с этим подходом? (платформа никогда не изменится)

Поиск в интернете показал похожее решение с использованием нативного кода.

Любые мысли, прежде чем я углублюсь в тяжелые испытания этого подхода, очень приветствуются. Я хотел бы дать представление о существующем коде, прежде чем писать собственные реализации потоков ввода-вывода ...

Спасибо.

1 Ответ

3 голосов
/ 23 июня 2010

Я сталкивался с этим и раньше. Единственный известный мне способ создания объектов FileDescriptor - это использование отражения (или из JNI) для установки частного поля int в классе FileDescriptor.

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

...