我从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的仿真器和设备上.
我该怎么办?
,并使用StringBuilder附加它们.
假设您仍然遇到问题,问题是,您的应用程序一直在做的其他事情,没有一个单一的内存块足够大. Android垃圾回收器不是一个压缩收集器,所以有可能拥有大量的空闲堆空间,但还不足以满足特定的分配请求.
在这种情况下,您可能需要切换到某种流式JSON解析器.如果您恰好只针对Honeycomb和更高版本,则可以使用
JSONReader
.否则, Jackson
据报在Android上运行,显然具有流式传输模式.
http://stackoverflow.com/questions/5842201/out-of-memory-error-when-putting-large-json-inputstream-to-string