我正在研究一些Java< - > Perl交互。我想知道将信息从Perl传递到Java的最佳方法是什么。 (关于Perl和Java here和here btw的好答案。)
有很多文本和XML(XML :: Twig)我在Perl中解析,在一个我应该从Java Web App调用的脚本中。所以我收集了所有这些数据,我需要它在Java中的某些对象中使用它。
将信息从Perl发送到Java有什么好的策略?甚至可以将对象或其他兼容的数据结构从Perl返回到Java吗?
我想写一个文本文件并从Java中读取它会使使用Perl获得的所有优化变得毫无意义。
Perlformance是一个重要的问题。
修改 从我所看到的here,也许Inline-Java会是一个不错的选择?
答案 0 :(得分:5)
如果性能很重要,我建议运行持久的Perl进程。每次要运行代码时启动Perl解释器都会产生很大的开销。
最简单的通信方式是让Java进程打开与Perl进程的TCP连接,编写一些数据并获取一些数据。
用于将数据从Perl进程发送回Java的格式取决于您发送的内容以及您希望代码的通用性和可重用性。发送回XML字符串将是很好的和通用的但是在Perl中发送用pack创建的字节数组,然后用Java中的DataInputStream读取将会快得多。
答案 1 :(得分:3)
答案 2 :(得分:2)
如果您已经拥有XML,那么最好的选择可能是继续使用它。
答案 3 :(得分:2)
Inline::Java。一旦你开始运行它就能很好地工作。几年前,我正在开发一个项目,它有一个Perl Web应用程序与Java SOAP服务器通信以进行实时通信,而且速度太慢了。我们用一个使用Inline :: Java进行通信的系统替换它,速度要快得多。绝对最小化你来回传递对象的点,并尝试使这些对象变得简单(我们坚持使用字符串,数字和数组)以防止事情失控。但我绝对是皈依者!
答案 4 :(得分:0)
我也觉得奇怪的是,用于解析XML的perl代码将比java中的等效代码快得多。尽管如此,我无法想象它会比IPC产生的开销更快。即使你使用持久的perl进程,你仍然必须发送数据,大概是通过套接字,然后获取一些数据,最后将其反序列化为可用的东西。
您是否尝试过在java中提高XML解析的性能?如果您正在使用DOM或第三方库(如JDOM或castor),请尝试使用SAX。或者只是使用正则表达式而不是解析XML会更快(jwz notwithstanding)。
无论如何,我建议首先使用带有java代码的探查器来查看是否可以改进它。