2011-10-13 31 views
0

JSON Frameworkを使用してクライアント側のデータをサーバーから更新しています。私は30 Pojoクラスがあり、私はサーバーからHTTP応答を受け取った。私はこの方法JsonオブジェクトがOutOfMemory例外を指定しています

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

を使用してリーダーのオブジェクトを作成し、私はこの

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

のようなJSONオブジェクトにそれを渡す。しかし、このラインはのOutOfMemory例外を与えています。 レスポンスをファイルに書き込むと、ファイルのサイズが約12MBであることがわかりました。 したがって、複数の応答で応答を分割する方法があります。つまり、OOMの例外を避けるために同時に読み書きを行うことができます。

、ヘルプ

答えて

0

言い難い探している限り、私たちが知らないよう、あなたのSynchronisationResponseクラスはどのようなものか。 内容を問わず、サブセクションに分割することができれば、それらをシリアル化してください。

0

JsonReaderを使用すると、メモリが足りなくてもJSONの大きなストリームを解析できます。詳細はドキュメント内にありますが、基本的にあなたがJsonReader作成:

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

をして値を取得するには、キーを取得するなどreader.nextString()reader.nextInt()を、reader.nextName()を使用して再帰下降パーサを書き、reader.beginObject()reader.endObject()reader.beginArray()reader.endArray()オブジェクトの境界をマークします。

これにより、構造全体をメモリに保持することなく、一度に1つの断片を任意の粒度で読み込んで処理することができます。データが長期間使用されている場合は、データベースまたはファイルに格納できます。

関連する問題