繁体   English   中英

用Java读取BIG XML文件的一小部分的有效方法

[英]Efficient way to read a small part of a BIG XML file in Java

我们有一个新要求:

有一些BIG xml文件不断进入我们的系统,我们需要使用Java立即快速处理它们。 该文件很大,但我们处理所需的信息是在一个非常小的元素内。 ......

在开始处理之前从大文件中提取这一小部分数据的最佳方法是什么。 如果我们尝试加载整个文件,由于大小,我们会立即出现内存不足错误。 什么是Java的有效方式,我可以使用它来获取..data..data..data ..数据元素,而无需逐行加载或读取文件。 我可以使用SAX Parser来完成这项工作吗?

谢谢

SAX解析器是基于事件的,速度更快,因为它们可以满足您的需求:它们不会完全读取xml文档。 Java发行版中提供了SAXParser

我不得不在之前的项目(1G-2G)中解析大量文件,并且不想处理使用SAX。 我发现在某些情况下SAX太低级了,并且在大多数情况下保留了遍历方法。

我使用了VTD库http://vtd-xml.sourceforge.net/ 它是一个极其快速的库,它使用指针来浏览文档。

好吧,如果你想读一个文件的一部分,你需要阅读文件的每一行能够识别感兴趣的文件的一部分,然后提取你所需要的。

如果您只需要传入XML的一小部分,您可以使用SAX,或者如果您只需要读取特定元素或属性,则可以使用XPath,这将更容易实现。

Java附带了内置的SAXParser实现以及XPath实现。 查找的SAXParser的javadoc 这里和XPath的位置

StAX是基于漫游数据的另一种选择,如SAX,但是通过“拉动”您想要的而不是“推送”给您来处理数据的更友好的方法(IMO)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM