次のコードを使用して、サーバー応答の文字列表現を取得しています。問題は、応答を渡そうとするとメモリ不足の例外がスローされることtoString()
です。このコードは Android で実行されています。
String resp = IOUtils.toString(resEntity.getContent(), "UTF-8");
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("Content-Type", "application/json");
httpGet.setHeader("Accept", "JSON");
HttpResponse httpResponse = httpclient.execute(httpGet);
HttpEntity resEntity = httpResponse.getEntity();
if (resEntity != null) {
//String resp = EntityUtils.toString(resEntity);
String resp = IOUtils.toString(resEntity.getContent(), "UTF-8"); // exception here
Log.i(TAG, resp);
// ........
// gosn parser code here
// ........
}
スタックトレースは次のとおりです。
java.lang.OutOfMemoryError: (Heap Size=47395KB, Allocated=36544KB)
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:94)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:124)
at java.lang.StringBuilder.append(StringBuilder.java:271)
at org.apache.commons.io.output.StringBuilderWriter.write(SourceFile:138)
at org.apache.commons.io.IOUtils.copyLarge(SourceFile:2002)
at org.apache.commons.io.IOUtils.copyLarge(SourceFile:1980)
at org.apache.commons.io.IOUtils.copy(SourceFile:1957)
at org.apache.commons.io.IOUtils.copy(SourceFile:1907)
at org.apache.commons.io.IOUtils.toString(SourceFile:778)
at org.apache.commons.io.IOUtils.toString(SourceFile:803)