无法解析大型Inputstream

时间:2016-03-02 03:41:32

标签: java xml parsing

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

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字符串。

1 个答案:

答案 0 :(得分:0)

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

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