我们有一项新要求:
有一些BIG xml文件不断进入我们的系统,我们需要使用Java立即快速处理它们。该文件很大,但我们处理所需的信息是在一个非常小的元素内。 ... ...
在开始处理之前从大文件中提取这一小部分数据的最佳方法是什么。如果我们尝试加载整个文件,由于大小,我们会立即出现内存不足错误。什么是Java的有效方式,我可以使用它来获取..data..data..data ..数据元素,而无需逐行加载或读取文件。是否有任何SAX Parser可以用来完成这项工作?
谢谢
答案 0 :(得分:4)
SAX解析器基于事件并且速度更快,因为它们可以满足您的需要:它们不会完全读取xml文档。 Java发行版中有SAXParser
。
答案 1 :(得分:3)
我必须解析之前项目(1G-2G)中的大文件,并且不想处理使用SAX。在某些情况下,我发现SAX太低级了,而且在大多数情况下保留是一种遍历方法。
我使用过VTD库http://vtd-xml.sourceforge.net/。它是一个非常快速的库,它使用指针来浏览文档。
答案 2 :(得分:2)
好吧,如果你想阅读一个文件的一部分,你将需要读取文件的每一行,以便能够识别感兴趣的文件的一部分,然后提取你的内容需要。
如果您只需要传入XML的一小部分,您可以使用SAX,或者如果您只需要读取特定元素或属性,则可以使用XPath,这将更容易实现。
Java带有内置的SAXParser实现以及XPath实现。找到SAXParser here和XPath here的javadoc。
答案 3 :(得分:2)
StAX是基于漫游数据的另一种选择,比如SAX,但是通过“拉动”你想要的东西来处理数据,而不是将它“推”给你,从而从更友好的方法(IMO)中获益。