2009-03-04 17 views
5

Pracuję nad niektórymi interakcjami Java < -> Perl. Chciałbym wiedzieć, jaki jest najlepszy sposób przekazywania informacji z Perla do Javy. (Świetne odpowiedzi na temat Perla i Javy here i here btw).Jak mogę przekazywać dane z Perla do Javy?

Jest dużo tekstu i XML (XML :: Twig) Piszę w Perlu, w skrypcie, który powinienem wywołać z aplikacji sieciowej Java. Mam więc wszystkie zebrane dane i potrzebuję ich użyć w niektórych obiektach w Javie.

Jaka może być dobra strategia przesyłania informacji z Perla do Javy? Czy możliwe jest zwrócenie obiektu lub innej zgodnej struktury danych z Perla na Javę?

Zgaduję, że zapisanie do pliku tekstowego i odczytanie go z Javy sprawiłoby, że cała optymalizacja zyskała przy użyciu Perla bez znaczenia.

Perlformance to ważna kwestia tutaj.

EDIT: Z tego co widziałem here, może Inline-Java byłoby dobrym rozwiązaniem?

+0

więc czy próbujesz zrobić swój stary kod java w perlu? – TStamper

+0

1. Spróbuj JSON 2. pozbyć się perla i używać tylko Java :) –

+0

Czytałem przez post tego pytania i zalecano korzystanie z JSON, Inline-Java, otwartego połączenia TCP i przesyłania danych, a na końcu bezpośrednio przekazać XML. * Który z nich jest lepszy wśród sugerowanych podejść? * Czy są inne lepsze opcje, takie jak usługi internetowe lub inne sugestie? – Rachel

Odpowiedz

5

Jeśli wydajność jest ważna, zaleciłbym posiadanie trwałego procesu Perla. Uruchomienie interpretera Perla za każdym razem, gdy chcesz uruchomić swój kod, będzie dość dużym obciążeniem.

Najprostszym sposobem komunikowania się jest to, że proces Java otwiera połączenie TCP z procesami Perla, zapisuje dane i odzyskuje.

Format używany do przesyłania danych z procesu Perla z powrotem do Java będzie zależał od tego, co wysyłasz i od tego, jak ogólny i wielokrotnego użytku ma być Twój kod. Wysyłanie łańcuchów XML będzie miłe i ogólne, ale wysłanie z powrotem tablic bajtowych utworzonych za pomocą pack w Perlu, a następnie odczytanie z DataInputStream w Javie będzie znacznie, znacznie szybsze.

+0

W rzeczywistości możesz używać Inline :: Java. Może utworzyć proces jvm, który komunikuje się z procesem Perla. Jest to niestandardowy format lub kurs, ale pozwala używać natywnych obiektów Java w Perlu i vice versa – mpeters

2

jeśli masz już XML, najlepszym wyjściem jest prawdopodobnie kontynuacja jego używania.

+0

Nasza pierwsza implementacja sprawiła, że ​​Java analizowała XML, ale okazało się, że Perl jest znacznie szybszy i skuteczniejszy. Więc próbujemy wyprowadzić to zadanie do Perla, które jest w tym lepsze. –

+0

Prawdopodobnie robisz coś bardzo dziwnego, jeśli Perl parsuje XML szybciej niż Java. –

+0

Używaliśmy xPath do nawigacji plików XML i uzyskiwania wartości węzłów; ale czy Perl nie jest zorientowany na taką pracę (parsowanie tekstów itp.)? –

3

JSON to łatwy, lekki format do przekazywania danych.

można dodać Rhino lub coś podobnego do zestawu narzędzi i może uzyskać dodatkową wydajność (nie wspominając o silniku skryptowym), ale będzie to zależeć od tego, jak skomplikowany planujesz swój projekt.

0

Również dziwne jest to, że twój kod perl do parsowania XML byłby znacznie szybszy niż równoważny kod w java. Nawet jeśli tak jest, nie mogę sobie wyobrazić, że byłby on kiedykolwiek szybszy od kosztów ponoszonych przez IPC. Nawet jeśli korzystasz z trwałego procesu perla, nadal będziesz musiał przesłać dane, prawdopodobnie przez gniazdo, a następnie odzyskać dane i ostatecznie przekształcić je w coś użytecznego.

Czy próbowałeś poprawić wydajność parsowania XML w java? Jeśli używasz DOM lub biblioteki innej firmy, takiej jak JDOM lub castor, spróbuj użyć SAX. A może po prostu za pomocą wyrażeń regularnych zamiast parsowania XML byłoby szybsze (jwz notwithstanding).

W każdym razie, polecam za pomocą profilera z kodem java najpierw sprawdzić, czy można go poprawić.

+1

Istnieje biblioteka perli XML analizująca parsowanie, ale nikt, kto dba o szybkość, nie używa jej. Większość perl XML parsing obejmuje expat lub libxml2 pod maską, która jest szybka. – runrig

+0

Nie widzę, jak to wiele zmieni. Nawet jeśli nieprzetworzone parsowanie XML jest znacznie szybsze, nadal masz narzucenie IPC. –

2

Inline::Java. Działa bardzo dobrze, gdy tylko uruchomisz go.Kilka lat temu pracowałem nad projektem, w którym aplikacja internetowa Perl rozmawiała z serwerem Java SOAP w celu komunikacji w czasie rzeczywistym i była zbyt powolna. Zastąpiliśmy go systemem wykorzystującym Inline :: Java do komunikacji i było znacznie szybsze. Zdecydowanie zminimalizuj punkty, w których przesuwaj obiekty w przód iw tył, i staraj się, aby te obiekty były proste (trzymaliśmy się ciągów, liczb i tablic), aby nie dopuścić do zbytniego wymknięcia się spod kontroli. Ale zdecydowanie jestem konwerterem!

Powiązane problemy