2011-09-07 35 views
2

我有负责解析XML事件并将它们推送到我们的RabbitMQ总线的web应用程序的内存问题。这个web应用程序在一个servlet中接收XML事件,我们将它解码并推送到我们的总线,然后我们确认发件人。我们正在使用java 5中的org.xml.sax.helpers.DefaultHandler,但看起来Stax(带有XMLStreamReader)好得多,仍然很容易阅读,但我们需要将我们的代码迁移到java6(请参阅SO上的this question)。它值得吗?在java中解析XML的内存效率最高的方法是什么?

在Java中解析XML的内存效率最高的方法是什么?我们正在寻找一个快速,高效的内存和易于编写/读取代码。这是否存在?

+4

我无法相信一个SAX解析器造成内存问题。由于它的性质,SAX是基于流的,因此内存开销非常低。你在做什么像缓存整个文档在内存中? –

+0

我们没有在内存中缓存文档,我们正在阅读流。代码很好,但现在我们收到了更多的事件,并且我们收到了更多... –

回答

3

事件驱动的解析器不会构建AST,因此速度和内存效率都很高。 XML的标准将由SAX standard定义。

The Xerces implementation claims to be fast.

+2

当使用最新的Xerces(2.11.0)与Java 1.6中包含的标准JAXP解析器时,我发现性能显着提高。只花了一半时间来解析一个大的XML文件。 –

+1

我想我会评论,以防万一任何人有同样的问题 - 我相信AST是抽象语法树 – ThisClark

1

NanoXML是支持SAX解析非常小,重量轻的XML解析器。这是Xerces的一个很好的选择。

+0

它是内存效率? –

+1

在进一步调查中,不,NanoXML不具有内存效率。 – mcfinnigan

+0

好的,谢谢,它总是很酷,不时发现新的库。 –

相关问题