【发布时间】:2015-06-06 00:40:20
【问题描述】:
解析大型 JSON 字符串时出现内存不足错误。
我见过几个使用 GSON 流式传输大型 JSON 文档的示例,但我的问题是我的 JSON 文档没有成百上千个可以有效标记化的“行”。相反,它包含一个带有大约 15MB 数据的 base64 节点,例如
{
"id":"somefile",
"base64":"super long base64 string...."
}
如何将此 JSON 文档中的单个 base64 字符串解析为文件并保存到文件系统而不会耗尽内存?使用 StringBuilder 将 base64 节点解析为字符串是导致当前 OOM 错误的原因。例如
...
InputStream is = con.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line); //out of memory
}
reader.close();
//parse the response into a POJO
MyFileClass f = new Gson().fromJson(sb.toString(), MyFileClass.class);
【问题讨论】:
标签: android json base64 out-of-memory gson