我的应用程序正在解析一个大的 http 响应,http 响应超过 6 兆字节并且是 json,但不是标准模式。
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();
文件中是否有缓冲读取器或输入流无关紧要,StringBuilder 根本无法包含整个对象,它会失败,out.append(buffer, 0, read);
或者它将失败,out.toString()
因为可能会制作另一个副本
IOUtils.copy
来自 apache 库的在幕后做同样的事情,它也会失败。
如何读取这个大对象以进行进一步操作。目前,这种方法在 Android 2.2 和 2.3 设备上失败,并且在较新的设备上使用的内存比我想要的要多。
类似的问题都有涉及附加到字符串生成器、逐行阅读或仅作为提示的不完整解决方案的答案,这不起作用。