我正在开发一个应用程序,首次启动时,我预计会以JSON格式(比如10-20 MB)下载大量数据。所有这些数据都在单个网络请求中传输(原因是数据是按请求动态生成的)。接收数据(in builder.append()
)时,fllowing代码抛出OOM异常:当从Android应用程序发出大型网络请求时避免OutOfMemory异常
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,如果数据也很大,它可能是相同的。所以好方法是临时文件。 – 2012-02-29 09:09:30
将数据保存到本地文件并处理它,我认为这是个好主意。 – idiottiger 2012-02-29 09:09:34