Как я могу передать данные из Perl в Java? - PullRequest
5 голосов
/ 04 марта 2009

Я работаю над некоторыми взаимодействиями Java <-> Perl. Я хотел бы знать, как лучше всего передавать информацию из Perl в Java. (Хорошие ответы о Perl и Java здесь и здесь кстати).

Там много текста и XML (XML :: Twig), который я анализирую в Perl, в сценарии, который я должен вызывать из Java Web App. Итак, у меня есть все эти собранные данные, и мне нужно, чтобы они использовались внутри определенных объектов в Java.

Что может быть хорошей стратегией для отправки информации из Perl в Java? Можно ли даже вернуть объект или другую совместимую структуру данных из Perl в Java?

Я полагаю, что запись в текстовый файл и чтение из Java сделают бессмысленной оптимизацию, полученную благодаря использованию Perl.

Perlformance является важной проблемой здесь.

EDIT: Из того, что я видел здесь , может быть Inline-Java был бы хорошим вариантом?

Ответы [ 5 ]

5 голосов
/ 04 марта 2009

Если важна производительность, я бы порекомендовал запустить постоянный Perl-процесс. Запуск интерпретатора Perl каждый раз, когда вы захотите запустить свой код, будет довольно трудоемким.

Самым простым способом связи для процесса Java является открытие TCP-соединения с процессами Perl, запись некоторых данных и их получение.

Формат, который вы используете для отправки данных из вашего Perl-процесса обратно в Java, будет зависеть от того, что вы отправляете, и от того, насколько универсальным и пригодным для повторного использования должен быть ваш код. Отправка назад строк XML будет хорошей и общей, но отправка обратно байтовых массивов, созданных с помощью pack в Perl, а затем чтение с помощью DataInputStream в Java будет намного, намного быстрее.

3 голосов
/ 04 марта 2009

JSON - это простой и легкий формат для передачи данных.

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

2 голосов
/ 04 марта 2009

Инлайн :: Java . Это работает очень хорошо, как только вы запустите его. Несколько лет назад я работал над проектом, в котором веб-приложение Perl взаимодействовало с сервером Java SOAP для связи в реальном времени, и это было слишком медленно. Мы заменили его системой, использующей Inline :: Java для связи, и это было намного быстрее. Определенно сведите к минимуму точки, которые вы передаете объектам назад и вперед, и постарайтесь сделать эти объекты простыми (мы придерживаемся строк, чисел и массивов), чтобы не дать вещам выйти из-под контроля. Но я определенно новообращенный!

2 голосов
/ 04 марта 2009

если у вас уже есть XML, ваш лучший вариант, вероятно, - продолжать его использовать.

0 голосов
/ 04 марта 2009

Мне также кажется странным, что ваш Perl-код для разбора XML будет значительно быстрее, чем эквивалентный код в Java. Даже если это так, я не могу себе представить, что это когда-либо будет быстрее, чем накладные расходы, понесенные МПК. Даже если вы используете постоянный perl-процесс, вам все равно придется отправлять ему данные, предположительно через сокет, затем возвращать некоторые данные и, наконец, десериализовать их во что-нибудь пригодное для использования.

Вы пытались улучшить производительность вашего XML-анализа в Java? Если вы используете DOM или стороннюю библиотеку, такую ​​как JDOM или castor, попробуйте вместо этого использовать SAX. Или, может быть, простое использование регулярных выражений вместо синтаксического анализа XML будет быстрее ( jwz несмотря на это) .

В любом случае, я бы рекомендовал сначала использовать профилировщик с вашим Java-кодом, чтобы посмотреть, можно ли его улучшить.

...