2009-03-04 15 views
5

我正在研究一些Java < - > Perl交互。我想知道什麼是將信息從Perl傳遞到Java的最佳方式。 (有關Perl和Java的很好的答案herehere btw)。如何將數據從Perl傳遞到Java?

我在Perl中解析了很多文本和XML(XML :: Twig),我在腳本中應該從Java Web App調用。所以我收集了所有這些收集的數據,並且我需要它在Java中的某些對象內使用它。

將信息從Perl發送到Java有什麼好的策略?是否有可能將一個對象或其他兼容的數據結構從Perl返回給Java?

我猜寫到一個文本文件並從Java讀取它會使所有通過使用Perl毫無意義的優化。

Perl性能是一個重要的問題。

編輯: 從我所看到的here,也許內聯Java將是一個不錯的選擇?

+0

那麼你想讓你的舊Java代碼進入Perl? – TStamper 2009-03-04 16:52:15

+0

1.嘗試JSON 2.擺脫perl,並只使用Java :) – 2009-03-04 20:15:10

+0

我正在閱讀該問題的帖子,並建議使用JSON,Inline-Java,打開TCP連接和傳輸數據,最後直接傳遞XML。 *建議的方法中哪一個更好? *還有其他更好的選擇嗎?Web服務還是其他建議? – Rachel 2009-10-19 21:15:32

回答

5

如果性能很重要,我建議持續運行Perl進程。每次你想運行你的代碼時啓動一個Perl解釋器將是相當的開銷。

最簡單的溝通方式是讓Java進程打開一個到Perl進程的TCP連接,寫入一些數據並返回。

用於將數據從Perl過程發回到Java過程的格式將取決於您發送的內容以及希望代碼的通用性和可重用性。發回XML字符串將是很好的和通用的,但發送在Perl中用pack創建的字節數組,然後在Java中用DataInputStream讀取將會快得多。

2

如果你已經有了XML,你最好的選擇可能是繼續使用它。

+0

我們的第一個實現是Java解析XML的,但是我們發現Perl在這個過程中更快更有效。所以我們試圖將這個工作推導出來,Perl更好。 – 2009-03-04 16:46:20

3

JSON是一種用於傳遞數據的簡單輕量級格式。

您可以添加Rhino或類似工具包,並可能獲得額外的性能(更不用說腳本引擎),但這取決於您計劃項目的複雜程度。

0

我也覺得很奇怪你的解析XML的perl代碼會比java中的等效代碼快得多。儘管如此,我無法想象它會比IPC所帶來的開銷更快。即使你使用一個永久性的perl進程,你仍然需要發送它的數據,大概是通過套接字,然後獲取一些數據,最後將其反序列化爲可用的東西。

你有沒有嘗試過改進你在Java中的XML解析的性能?如果您使用DOM或JDOM或castor等第三方庫,請嘗試使用SAX。或者只是使用正則表達式,而不是解析XML會更快(jwz notwithstanding)

在任何情況下,我會建議使用分析您的Java代碼首先,看它是否能夠得到改善。

2

Inline::Java。一旦啓動並運行,它就可以很好地工作。幾年前,我正在開發一個項目,該項目有一個Perl Web應用程序與Java SOAP服務器進行某種實時通信,但實際上它太慢了。我們用一個使用Inline :: Java進行通信的系統替換它,並且速度更快。絕對要儘量減少來回傳遞對象的點數,並儘量使這些對象變得簡單(我們堅持使用字符串,數字和數組),以防止事物過度失控。但我絕對是一個轉換!

相關問題