Java 在大型Inputstream中解析xml时遇到问题
我通过API运行查询,通过InputStream接收到的XML比我通常预期的要多。这导致我在尝试将XML解析为字符串时遇到堆空间错误。以下是我当前解析输入流的方式:Java 在大型Inputstream中解析xml时遇到问题,java,xml,parsing,Java,Xml,Parsing,我通过API运行查询,通过InputStream接收到的XML比我通常预期的要多。这导致我在尝试将XML解析为字符串时遇到堆空间错误。以下是我当前解析输入流的方式: public String parseXml(InputStream inputStream) throws IOException { String myString; List<String> matchingXmlList = new ArrayList<>(); byte[]
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;
}
publicstringparsexml(InputStream-InputStream)抛出IOException{
字符串myString;
List matchingXmlList=新建ArrayList();
字节[]byteArray=toByteArray(inputStream);
String tempString=新字符串(byteArray,StandardCharsets.UTF_8);
返回临时字符串;
}
在正常情况下,这是输出:
<?xml version="1.0" encoding="UTF-8">
<queryResult>
<records />
<records />
<records />
<records />
</queryResult>
收到这样的输出后,我使用匹配器解析每个单独的记录节点,并将其添加到字符串列表中。但是当InputStream太大时,我在尝试将InputStream放入字符串时会遇到内存问题
有没有一种方法可以解析InputStream而不会遇到内存问题?我需要能够将每个单独的记录元素解析为一个XML字符串。您有两个选择,使用像
JAXB
这样的XML库,或者一次接受字节。您正在创建溢出,因此每次读取1024
字节,直到文件结尾:)
此外,您是否尝试读取文件或在读取后分配值?对于大字符串,请使用StringBuilder