【问题标题】:Out of memory error while parsing simple JSON structure with large blob解析具有大 blob 的简单 JSON 结构时出现内存不足错误
【发布时间】:2013-07-18 11:08:05
【问题描述】:

我必须在 android 中解析以下 json 响应,其中BookContent 是转换为 base64 并以字符串形式返回的 book 的内容。对于某些书籍,我得到了非常大的字符串作为响应。如果我将整个响应转换为 JSONObject,(JSONObject obj = new JSONObject(response)) 它会崩溃,抛出 out of memory 异常。我得到的json结构很简单,但是BookContent属性的字符串长度很大。

{"BookResult":{"BookContent":"3lWeX0Y1YaKdrOFr\/zD6W13fO67d\/zBow8f\/ERgtdbrn\/F6V1L79krYMeFHpp7D3FwOuYzDE5nI5iU0yh6UawZqmoam3sRATwI3DY9hIObHvoiB8Q0S+ver0KsO\/EoesVYErQs+SAEfF9JGXJV21+q16McesFbjpR2mPr3FMtMpGe2v+AIWK5hHu10iJ............","BookId":98,"Name":"Android principles"}}

【问题讨论】:

  • 找到一种更好的方式来分发图书,而不是在 JSON 中间使用一些大的编码字符串。
  • 单独流式传输内容,并写入磁盘。 JSON 可以具有指向内容流的链接。
  • 响应不仅包含pdf,还包含jpeg、png等格式。根据我们的项目要求,所有这些数据都应该只作为 blob 发送,因为我们有一个 iOS 版本可以满足相同的要求,并且运行良好。
  • @SD : 感谢您的回复。我可以将整个 json 响应写入文件。但是在解析它时,我应该将它转换为 JSONObject 作为 JSONObject obj = new JSONObject(response);obj.getString("BookContent") 以获取内存不足异常的实际内容
  • @njzk2: 大约 6 Mb

标签: android out-of-memory


【解决方案1】:

Json Streaming
是最好的选择,而不是将整个大型 json 放入内存 参考这个链接
http://www.ngdata.com/parsing-a-large-json-file-efficiently-and-easily/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2021-04-23
    • 2014-05-10
    • 2011-08-16
    • 2012-11-09
    • 1970-01-01
    相关资源
    最近更新 更多