私はアプリケーションを開発しています。最初にJSON形式(たとえば10-20 MB)で多くのデータをダウンロードする予定です。このすべてのデータは、単一のネットワーク要求で転送されます(データが要求ごとに動的に生成される理由)。データを受信したときfllowingコードは(in builder.append()
)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();
}
が、私はこのエラーを回避するために何ができますか?私は一時的なファイルにデータを保存し、それを処理しようと考えています。しかし、それがうまくいくかどうかは分かりません。 もう1つの可能性は、ネットワークI/Oを2つに分割することです。最初の部分は、ダウンロードする必要のあるデータを受信し、2番目の部分は実際にデータをダウンロードします。
アドバイスはありますか?
一時ファイルにデータを保存できます。方法#2については、データが大きい場合でも同じことができます。したがって、良いアプローチは一時ファイルです。 –
ローカルファイルにデータを保存して処理してみてください。良いアイデアだと思います。 – idiottiger