解析大型xml文件时Java堆空间错误

问题描述:

我想解析一个大型xml文件(785mb)并将数据写入csv。当我尝试解析文件时,出现java heapspace错误(内存不足)。 我试着将堆大小增加到1024mb,但代码可以处理最大50mb的文件。解析大型xml文件时Java堆空间错误

请让我知道一个在java中解析大型XML文件的解决方案。

+2

我从文件中解析数据时学到的一件事就是不缓存它。确保您没有将整个文件拖入对象中。 – generalcrispy 2014-10-16 14:08:23

+1

你使用SAX或DOM解析器吗? – Icewind 2014-10-16 14:09:49

+0

如果你使用32位Java,你将不会超过cca 1.5GB的堆空间 – Miki 2014-10-16 14:09:58

这里的解决方案是使用Streaming Api for XML(StAX)。 这里不错tutorial

您应该使用SAXParser而不是DOMParser 区别在于它不会将完整的XML数据加载到内存中。

看看这个教程:http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

问候,

罗曼。

+0

我无法使用SAX解析器,因为xml文件中的标记未知。所以我将无法为SAX解析器创建错误处理程序。 – 2014-10-16 14:18:03

+0

好的,所以StAX解析器可能是更好的选择,因为它使用了迭代器方法。 – Romain 2014-10-16 14:26:10