5

我正在处理一些 Java <-> Perl 交互。我想知道将信息从 Perl 传递到 Java 的最佳方法是什么。(关于 Perl 和 Java 的很好的答案在这里这里顺便说一句)。

有很多文本和 XML(XML::Twig) 我在 Perl 中解析,在我应该从 Java Web App 调用的脚本中。所以我收集了所有这些数据,我需要它在 Java 中的某些对象中使​​用它。

将信息从 Perl 发送到 Java 的好策略是什么?是否有可能从 Perl 返回一个对象或其他兼容的数据结构到 Java?

我猜想写入一个文本文件并从 Java 中读取它会使使用 Perl 获得的所有优化变得毫无意义。

性能是这里的一个重要问题。

编辑: 从我在这里看到的情况来看,也许 Inline-Java 会是一个不错的选择?

4

5 回答 5

5

如果性能很重要,我建议运行持久的 Perl 进程。每次你想运行你的代码时启动一个 Perl 解释器将是一个相当大的开销。

最简单的通信方式是让 Java 进程打开与 Perl 进程的 TCP 连接,写入一些数据并取回一些数据。

您用于将数据从 Perl 进程发送回 Java 进程的格式将取决于您发送的内容以及您希望代码的通用性和可重用性。发回 XML 字符串会很好而且通用,但是发回用Perl 中的pack创建的字节数组,然后用 Java 中的DataInputStream读取会快得多。

于 2009-03-04T17:12:56.777 回答
3

JSON是一种用于传递数据的简单、轻量级的格式。

您可以添加Rhino或与您的工具包类似的东西,并可能获得额外的性能(更不用说脚本引擎),但这取决于您计划项目的复杂程度。

于 2009-03-04T16:53:56.370 回答
2

如果您已经拥有 XML,那么您最好的选择可能是继续使用它。

于 2009-03-04T16:43:10.607 回答
2

内联::Java。一旦您启动并运行它,它就会非常有效。几年前,我在做一个项目,其中有一个 Perl Web 应用程序与 Java SOAP 服务器进行实时通信,但速度太慢了。我们将其替换为使用 Inline::Java 进行通信的系统,并且速度更快。绝对最小化你来回传递对象的点,并尝试使这些对象简单(我们坚持使用字符串、数字和数组)以防止事情变得过于失控。但我绝对是一个皈依者!

于 2009-03-04T18:55:05.767 回答
0

我还觉得奇怪的是,您用于解析 XML 的 perl 代码比 java 中的等效代码要快得多。但是,即使是这样,我也无法想象它会比 IPC 产生的开销更快。即使您使用持久的 perl 进程,您仍然必须向它发送数据,大概是通过套接字,然后取回一些数据,最后将其反序列化为可用的东西。

您是否尝试过提高 Java 中 XML 解析的性能?如果您使用的是 DOM 或第三方库(如 JDOM 或 castor),请尝试使用 SAX。或者也许只使用正则表达式而不是解析 XML 会更快(尽管有 jwz)

在任何情况下,我都建议您先对您的 java 代码使用分析器,看看它是否可以改进。

于 2009-03-04T18:30:07.853 回答