gpt4 book ai didi

java - android java没有足够的顺序内存用于stringbuilder

转载 作者:行者123 更新时间:2023-11-29 03:30:35 24 4
gpt4 key购买 nike

我的应用程序正在解析一个大的 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() 处失败,因为可能会制作另一个副本

来自 apache 库的

IOUtils.copy 正在做同样的事情,但它也会失败。

如何读取这个大对象以进行进一步操作。现在,此方法在 Android 2.2 和 2.3 设备上失败,并且在较新的设备上使用的内存比我想要的多。

类似的问题都有涉及附加到 stringbuilder、逐行读取的答案,或者有不完整的解决方案,这些解决方案只是提示,但这些都行不通。

最佳答案

您需要做以下两件事之一:

  1. 从服务器获取多个较小的 JSON 响应并解析它们。这在移动设备上可能更可取,因为大块数据可能无法可靠传输,这将导致设备重复请求整个数据。
  2. 使用流式 JSON 解析器,例如 Jackson , 处理传入的数据。

关于java - android java没有足够的顺序内存用于stringbuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18490897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com