2016-03-02 76 views
0

我正在通过API运行查询,并且通过InputStream收到了比我通常预期更大的一组XML。这导致我在尝试将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> 

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

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

回答

0

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

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