1
我的應用程序解析一個大的http響應,http響應超過6兆字節,是json,但不是在標準架構。android java沒有足夠的順序內存的stringbuilder
final char[] buffer = new char[0x10000];
StringBuilder out = new StringBuilder();
Reader in = new InputStreamReader(is, "UTF-8");
int read;
System.gc();
do
{
read = in.read(buffer, 0, buffer.length);
if (read > 0)
{
out.append(buffer, 0, read);
}
} while (read >= 0);
in.close();
is.close();
in = null;
is = null;
System.gc();
return out.toString();
如果從一個文件,或者一個InputStream一個BufferedReader不要緊,StringBuilder的根本不能包含整個對象,並將其在out.append(buffer, 0, read);
失敗或將在out.toString()
失敗,因爲另一副本可以進行
IOUtils.copy
來自apache庫在引擎蓋下做同樣的事情,它也會失敗。
如何讀取這個大對象進行進一步操作。此時此方法在Android 2.2和2.3設備上失敗,並且在較新的設備上使用的內存比我想要的要多。
類似的問題都有答案,包括追加到一個stringbuilder,閱讀行,或有不完整的解決方案,只是提示,這是行不通的。
HM,使用傑克遜有關,這需要我重寫正被整個應用程序中使用我的整個HTTPGET方法。其次,這是否意味着這個api調用,我將需要一個對象,聲明每個變量?它也嵌套了對象 – CQM
Jackson在同一個地方崩潰了,實際上是「java.lang.StringBuilder.toString(StringBuilder.java:663)」,因爲它似乎也在內部使用了字符串生成器! hm – CQM
發佈你的代碼 - 你在使用Jackson的流媒體API嗎? – 323go