2011-10-13 3 views
0

JSON Framework를 사용하여 클라이언트 측의 데이터를 서버에서 업데이트하고 있습니다. 30 Pojo 클래스가 있고 서버에서 HTTP 응답을 받았습니다. 나는 방법Json Object가 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().

이렇게하면 전체 구조를 메모리에 보유하지 않고도 한 번에 하나의 조각을 읽고 입도에 상관없이 처리 할 수 ​​있습니다. 데이터가 장기간 지속되면 데이터베이스 또는 파일에 저장할 수 있습니다.

관련 문제