Несмотря на то, что ответ принят, ключевой проблемой здесь является семантическое несоответствие между двумя языками: если у вас есть какое-то соединение с потоком, как вы эффективно обмениваетесь данными?
Одно из решений, которое я мог бы порекомендовать, - это буфер протокола Google. Он не решает проблему с подпроцессом / JNI / сокетом, но он делает это достаточно эффективным способом передачи сложной объектной структуры через потоковый протокол.
Помните: JNI сложен, особенно для сложных ссылок на объекты, но он эффективен. Самое главное - правильно передать данные по этому эффективному переключению контекста. Разъем GPB + JNI / Sub-Process позволяет одному переключателю контекста передавать данные в сочетании с эффективной поддержкой кодеков с обеих сторон.