2011-10-13 95 views
0

我正在使用JSON框架来更新客户端从服务器端的数据。我有30个Pojo类,并且我收到了来自服务器的Http响应。我使用的方法Json对象发出OutOfMemory异常

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

创建Reader的对象,我通过它的JSON对象这样

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

,但此行是给OutOfMemory例外。 我在一个文件中写入响应,发现文件大小约为12MB。 所以是他们的任何方式来分裂响应在多个响应。所以我可以同时读取和写入,以避免OOM异常。

寻找帮助

回答

0

很难说,只要我们不知道,你SynchronisationResponse类是什么样子。 无论您的内容是什么,如果您可以将其分割成小节,请执行并将其序列化。

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()标记物体边界。

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