Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在大型Inputstream中解析xml时遇到问题_Java_Xml_Parsing - Fatal编程技术网

Java 在大型Inputstream中解析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[]

我通过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;
}
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