java – 將大型JSON(InputStream)放入字串時出現記憶體不足錯誤
我從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