java – 将大型JSON(InputStream)放入字符串时出现内存不足错误

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介:http://stackoverflow.com/questions/5842201/out-of-memory-error-when-putting-large-json-inputstream-to-string

我从Web服务接收gziped的JSON,然后我解压缩(解压缩的JSON的大小是3.2MB).

我需要将收到的InputStream转换为String,以便我可以创建JSONObject并进行解析.我用这个代码来做:

public static String InputStreamToString(InputStream in) 
    throws IOException {

    BufferedInputStream bis = new BufferedInputStream(in);
    ByteArrayOutputStream buf = new ByteArrayOutputStream();
    int result = bis.read();

    while(result != -1) {
      byte b = (byte)result;
      buf.write(b);
      result = bis.read();
    }        
    return buf.toString();
}

我在最后一行接收java.lang.OutOfMemoryError:“return buf.toString();”在288MB Ram的仿真器和设备上.

我该怎么办?

一次读取一个字节是1990年代.使用HttpClient和BasicResponseHandler,或至少 read the data in respectable chunks

,并使用StringBuilder附加它们.

假设您仍然遇到问题,问题是,您的应用程序一直在做的其他事情,没有一个单一的内存块足够大. Android垃圾回收器不是一个压缩收集器,所以有可能拥有大量的空闲堆空间,但还不足以满足特定的分配请求.

在这种情况下,您可能需要切换到某种流式JSON解析器.如果您恰好只针对Honeycomb和更高版本,则可以使用 JSONReader .否则, Jackson 据报在Android上运行,显然具有流式传输模式.

http://stackoverflow.com/questions/5842201/out-of-memory-error-when-putting-large-json-inputstream-to-string


以上所述就是小编给大家介绍的《java – 将大型JSON(InputStream)放入字符串时出现内存不足错误》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

实战移动互联网营销

实战移动互联网营销

江礼坤 / 机械工业出版社 / 2016-1 / 79.00

移动互联网的兴起,又为企业带来了新的挑战与机遇!越来越多的人,看到了移动互联网的价值与前景,但是在具体操作时,移动互联网具体如何玩?企业如何向移动互联网转型?如何通过移动互联网做营销?等等一系列问题,接踵而至。虽然目前相关的资料和文章很多,但是都过于零散,让人看完后,还是无从下手。而本书旨在成为移动互联网营销领域标准的工具书、参考书,为大家呈现一个系统、全面的移动互联网营销体系。让大家从思维模式到......一起来看看 《实战移动互联网营销》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试