当前位置: 首页 > 知识库问答 >
问题:

使用xstream分析大型xml文件时发生OutOfMemoryError

端木元青
2023-03-14

在读取“100 MB”的大型XML文件并使用xstream对其进行解析时,我遇到了一个问题始终会出现以下错误

java.lang.OutOfMemoryError: Java heap space error occurs,

下面是解析XML的代码

XStream xstream = new XStream();
xstream.processAnnotations(Class.forName((String)ClassName));

ClassName是一个普通类,其字段带有xml注释。

然后使用

Object resultDto = xstream.fromXML((String)fileString);

fileString:将xml文件作为inputstream读取并放入字符串缓冲区后的xml文件。

以上代码适用于小文件,但不适用于大文件,有什么想法吗?

共有3个答案

佟阳飙
2023-03-14

你能用运行时参数运行你的解析程序吗?在这种情况下,添加参数-xmx512M-xms512M应该可以做到这一点,因为它会增加堆的大小。

微生耘豪
2023-03-14

据我所知,有两种解决方案:

  1. 增加堆空间。
  2. 使用SAX解析器而不是DOM解析器(不确定您是否可以使用xstream执行此操作)。

最后,数据可能太大而无法适应。

彭展
2023-03-14

不要将文件转换为字符串,然后使用Xstream,而是直接使用输入流或文件阅读器。XStream.fromXML接受各种输入,如File、InputStream、FileReader,这些输入直接操作,无需首先将File的文本表示形式作为String加载到内存中。

 类似资料:
  • 我定义了一个类来存储我的应用程序的配置数据。我想将其实例保存到xml并为此使用XStream。但是当我尝试编写实例时,我总是遇到内存错误。 这是我的类定义: ...等所有标准getter和setter 下面是我将单个对象导出为xml的处理程序 每次我抛出“线程中的异常”JavaFX应用程序线程“java.lang.OutOfMemoryError:java堆空间”。我不明白为什么这么简单的类会抛出

  • 为了在巨大的xml文件中执行XPATH查询,我阅读了许多喜欢VTD-xml的文章,因此我复制了这些文章中的代码: 但当我运行它时没有结果,所以这意味着XML文件没有映射到内存中。。。我的问题是如何在VTD-xml中强制映射xml文件?

  • 问题内容: 我需要一个XML解析器来解析大约1.8 GB的文件。 因此,解析器不应将所有文件加载到内存中。 有什么建议? 问题答案: 除了推荐的SAX解析之外,您还可以使用JDK(包javax.xml.stream)中包含的StAX API(一种SAX演进)。 StAX项目主页:http://stax.codehaus.org/Home 简介:http : //www.xml.com/pub/a/

  • 如何编写java类来读取此XMl文件 我试过这样 但我得到了这个错误 请帮我解决这个问题。。。 非常感谢。

  • 问题 你想使用尽可能少的内存从一个超大的XML文档中提取数据。 解决方案 任何时候只要你遇到增量式的数据处理时,第一时间就应该想到迭代器和生成器。 下面是一个很简单的函数,只使用很少的内存就能增量式的处理一个大型XML文件: from xml.etree.ElementTree import iterparse def parse_and_remove(filename, path):

  • 我正试图读/写一个巨大的文本文件。但当我尝试这样做时,我得到了错误: 我的代码如下: 我尝试添加一个计数器(count),这样它可以在读取一定数量的行后刷新缓冲区。它不起作用。我知道计数器工作不正常。在执行“while”循环的特殊次数后,它不会变为零。我在while循环之前和之后添加了一个“for”循环来清空计数器,但效果不太好。 有什么建议吗?