我正在使用JSON Framework从服务器更新客户端的数据。我有30个Pojo类,我收到了来自服务器的Http响应。我使用方法
创建了Reader的ObjectInputStream instream = entity.getContent();
reader = new InputStreamReader(instream, "UNICODE");
我将它传递给Json对象,就像这样
synchronizationResponse = gson.fromJson(reader, SynchronizationResponse.class);
但是这一行给出了OutOfMemory Exception。 我在一个文件中写了响应,发现文件的大小约为12MB。 他们可以通过多种方式将响应分成多个响应。所以我可以同时读写,以避免OOM异常。
寻求帮助
答案 0 :(得分:0)
很难说,只要我们不知道,您的SynchronisationResponse类看起来像什么。 无论您的内容是什么,如果您可以将其拆分为子部分,请执行此操作并将其序列化。
答案 1 :(得分:0)
您可以使用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()
标记对象边界。
这允许您以任何粒度一次读取和处理一个部分,而无需将整个结构保存在内存中。如果数据是长期存在的,则可以将其存储在数据库或文件中。