【问题标题】:Trouble parsing xml in large Inputstream在大型 Inputstream 中解析 xml 时遇到问题
【发布时间】:2016-03-02 03:41:32
【问题描述】:

我正在通过 API 运行查询,并且通过 InputStream 接收的 XML 集比我通常预期的要大。这导致我在尝试将 XML 解析为字符串时遇到堆空间错误。这是我当前解析输入流的方式:

public String parseXml(InputStream inputStream) throws IOException {
    String myString;
    List<String> matchingXmlList = new ArrayList<>();
    byte[] byteArray = toByteArray(inputStream);
    String tempString = new String(byteArray, StandardCharsets.UTF_8);
    return tempString;
}

正常情况下是这样的输出:

<?xml version="1.0" encoding="UTF-8">
  <queryResult>
    <records />
    <records />
    <records />
    <records />
  </queryResult>

收到这样的输出后,我使用 Matcher 解析每个单独的记录节点并将其添加到字符串列表中。但是当 InputStream 太大时,我在尝试将 InputStream 放入 String 时会遇到内存问题。

有没有办法解析 InputStream 而不会遇到内存问题?我需要能够将每个单独的记录元素解析为 XML 字符串。

【问题讨论】:

    标签: java xml parsing


    【解决方案1】:

    您有两个选择,使用像 JAXB 这样的 XML 库或一次接受字节。您正在创建溢出,因此一次读取1024 字节,直到文件结束:)

    您是否还在尝试读取文件或在读取文件后分配值?对于大字符串,使用StringBuilder

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-16
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多