【问题标题】:Out of memory exception while parsing 5MB JSON response in Android在 Android 中解析 5MB JSON 响应时出现内存不足异常
【发布时间】:2012-03-09 10:40:35
【问题描述】:

我收到 5MB 的 JSON 响应,我正在使用 1024 大小的字节数组下载并保存在 StringBuffer 中。

要解析此响应,我必须创建一个 JSONObject,并将参数作为字符串。在将响应转换为字符串时,我收到了 out of memory exception(stringBufferVar.toString()).

从服务中,我将收到以下响应,最多 5 个附件,每个附件最多 5MB 数据,采用 Base64 编码。

以下是服务的响应。

{"result":[{"attachment":{"name":"one.doc", "type":"document", "data":"base64 encoded data max of 5MB"}, {"attachment":{"name":"two.txt", "type":"text", "data":"base64 encoded data max of 5MB"} }] }

我将在列表中显示附件,当用户单击一个项目时,我必须将该附件保存在 SDCard 中。为此,我该如何解析和保存 JSON 格式的海量数据。

请提供任何解决方案。

提前致谢。

【问题讨论】:

    标签: android json parsing out-of-memory


    【解决方案1】:

    您需要使用基于流的解析器。在 API 11+ 中有 http://developer.android.com/reference/android/util/JsonReader.html

    下面有gsonhttp://code.google.com/p/google-gson/

    此外,您可能需要在使用 JsonReader 重新打开服务响应之前将其保存为文件。

    【讨论】:

    • 感谢您的回复。我的应用程序构建目标 2.3.1(API 级别 9)。此外,我尝试使用 gson 解析器仍然与我得到的 OutOfMemory 相同。 InputStream is = helper.postData(url, parameters); InputStreamReader ipReader = new InputStreamReader(is); Gson gson = 新 Gson(); AttachmentDO attachmentResp = gson.fromJson(ipReader, AttachmentDO.class); com.google.gson.Gson.fromJson(Gson.java:694) - java.lang.OutOfMemoryError
    • 您需要使用基于流的解析器。我认为 gson 有这个能力,但不是你使用它的方式
    【解决方案2】:

    使用杰克逊

    Jackson Github

    这应该可以解决您的问题。 但我不建议你使用没有分页的海量数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2011-08-07
      • 2018-08-11
      相关资源
      最近更新 更多