我正在通过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字符串。
答案 0 :(得分:0)
您有两种选择,使用像JAXB
这样的XML库或一次接受字节。您正在创建溢出,因此一次读取1024
个字节,直到文件结束:)
您还在尝试阅读文件或在阅读后分配值吗?对于大字符串,请使用StringBuilder