【问题标题】:Json Object is giving OutOfMemory ExceptionJson 对象给出 OutOfMemory 异常
【发布时间】:2011-12-06 22:56:19
【问题描述】:

我正在使用 JSON 框架从服务器更新客户端的数据。我有 30 个 Pojo 类,我收到了来自服务器的 Http 响应。我使用方法创建了Reader的对象

InputStream instream = entity.getContent();
reader = new InputStreamReader(instream, "UNICODE");

我像这样在 Json 对象中传递它

synchronizationResponse = gson.fromJson(reader, SynchronizationResponse.class);

但是这条线给出了 outOfMemory 异常。 我将响应写入一个文件,发现文件大小约为 12MB。 他们将响应拆分为多个响应的任何方式也是如此。这样我就可以同时读写以避免OOM异常。

寻求帮助

【问题讨论】:

    标签: android json


    【解决方案1】:

    很难说,只要我们不知道,你的 SynchronisationResponse 类是什么样子的。 无论您的内容是什么,如果您可以将其拆分为多个子部分,请执行此操作并对其进行序列化。

    【讨论】:

      【解决方案2】:

      您可以使用 JsonReader 解析大量 JSON 流,而不会耗尽内存。详细信息在文档中,但基本上你创建了一个 JsonReader:

      JsonReader reader = new JsonReader(new InputStreamReader(instream, "UNICODE"));
      

      并编写递归下降解析器,使用reader.nextName() 获取键,reader.nextString()reader.nextInt() 等获取值,并使用reader.beginObject()reader.endObject()reader.beginArray()reader.endArray() 标记对象边界。

      这允许您以任何粒度一次读取和处理一个片段,而无需将整个结构保存在内存中。如果数据是长期存在的,您可以将其存储在数据库或文件中。

      【讨论】:

        猜你喜欢
        • 2023-03-22
        • 1970-01-01
        • 2012-01-14
        • 2015-12-04
        • 1970-01-01
        • 1970-01-01
        • 2018-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多