2009-03-04 2 views
5

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

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

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

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

Perlformance - важная проблема.

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

+0

так вы пытаетесь сделать свой старый код java в perl? – TStamper

+0

1. попробуйте JSON 2. Избавьтесь от perl и используйте только Java :) –

+0

Я читал пост этого вопроса, и было рекомендовано использовать JSON, Inline-Java, открывать TCP-соединение и передавать данные и, наконец, напрямую передать XML. * Какой из них лучше среди предлагаемых подходов? * Есть ли другие варианты для этого, что касается веб-служб или любого другого предложения? – Rachel

ответ

5

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

Самый простой способ общения - это процесс Java, который открывает TCP-соединение с процессами Perl, записывает некоторые данные и возвращает их обратно.

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

+0

Вы можете использовать Inline :: Java таким образом. Он может создать процесс jvm, который связывается с вашим процессом Perl. Это нестандартный формат или курс, но он позволяет использовать собственные объекты Java в Perl и наоборот – mpeters

2

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

+0

В нашей первой реализации Java проанализировал XML, но мы обнаружили, что Perl намного быстрее и эффективнее в этом. Поэтому мы пытаемся перенести эту работу на Perl, которая лучше на нее. –

+0

Возможно, вы делаете что-то очень странное, если Perl анализирует XML быстрее, чем Java. –

+0

Мы использовали xPath для навигации по файлам XML и получения значений узлов; но, не Perl ориентирован на такую ​​работу (текстовый синтаксический анализ и тому подобное)? –

3

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

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

0

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

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

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

+1

Существует чистая библиотека анализа синтаксиса Perl XML, но никто, кто заботится о скорости, использует ее. Большинство Perl XML-синтаксического анализа включают экспат или libxml2 под капотом, который выполняется быстро. – runrig

+0

Я не понимаю, как это будет иметь большое значение. Даже если сырой синтаксический анализ XML значительно быстрее, у вас все еще есть накладные расходы IPC. –

2

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

Смежные вопросы