在Android中将Stream转换为String时出现OutOfMemoryError

时间:2012-12-04 06:39:45

标签: java android out-of-memory bufferedreader

从Assets文件夹加载xml文件。我得到了OutOfMemoryError。 我使用的代码是

private String convertStreamToString(InputStream is) {  
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + NEW_LINE);
        }
        reader.close();

    } catch (IOException e) {
        //do nothing.
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            //do nothing.    
        }
    }
    reader=null;
    return sb.toString();
}

是否有另一种方法可以摆脱这种异常。 如果您发布任何代码将更有帮助。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

使用String解析一个大的Xml并不是一个好主意。您应该转向解析器的流式版本。 Google Http Java Client提出了这样一个库:http://code.google.com/p/google-http-java-client

答案 1 :(得分:0)

put line = null;在追加到某人后的while循环中。

答案 2 :(得分:0)

尝试下面

您是否尝试过内置方法将流转换为字符串?它是Apache Commons库的一部分(org.apache.commons.io.IOUtils)。

那么你的代码就是这一行:

字符串总数= IOUtils.toString(inputStream);

可在此处找到相关文档:http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString%28java.io.InputStream%29

可以从这里下载Apache Commons IO库:http://commons.apache.org/io/download_io.cgi