2016-03-02 78 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