【发布时间】:2012-02-29 09:03:51
【问题描述】:
我正在开发一个应用程序,在首次启动时,我预计会下载大量 JSON 格式的数据(比如 10-20 MB)。所有这些数据都在单个网络请求中传输(因为数据是根据请求动态生成的)。以下代码在接收数据时抛出OOM异常(in builder.append()):
public static String readToString(InputStream stream) throws IOException {
BufferedReader in = null;
StringBuilder builder = new StringBuilder();
in = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
char[] buffer = new char[1024];
int read = 0;
while ((read = in.read(buffer, 0, 1024)) > 0) {
builder.append(buffer, 0, read);
}
in.close();
return builder.toString();
}
我可以做些什么来避免这个错误?我正在考虑尝试将数据保存到临时文件中,然后对其进行处理。但我不确定它是否会起作用。 另一种可能性似乎是将网络 IO 分为两部分:第一部分,应用程序接收有关它应该下载的数据,第二部分它实际下载数据。
有什么建议吗?
【问题讨论】:
-
您可以将数据保存到临时文件中。关于方式#2,如果数据也很大,它可能是相同的。所以好的方法是临时文件。
-
将数据保存到本地文件并进行处理,我认为这是个好主意。
标签: android out-of-memory