HttpResponse responseGet;
try {
responseGet = client.execute(get);
switch (responseGet.getStatusLine().getStatusCode()) {
case 200:
File SDCardRoot = Environment.getExternalStorageDirectory();
File directory = new File(SDCardRoot
+ "/OfflineDocuments/"
+ (document.getPath() == null ? ""
: (document.getPath() + "/")));
directory.mkdirs();
File file = new File(directory, fileName);
InputStream is = responseGet.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(baf.toByteArray());
fos.close();
break;
default:
Log.e("Statuscode", "Unexpected status code: "
+ responseGet.getStatusLine().getStatusCode());
break;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (Exception e1) {
e1.printStackTrace();
}
작은 문서에도 적용됩니다. 그러나 몇 MB보다 큰 문서의 경우이 코드는 "OutOfMemoryException"과 충돌합니다. 어떤 생각?파일을 다운로드 할 때 메모리가 부족합니다.
귀하의 솔루션은 모든 단일 바이트가 기록되기 때문에 앱을 매우 어렵게 만듭니다. 나는 그것을 1MB를 요약하고, 한 번에 작성하고, 1MB를 다시 캐싱하기 시작했다. 완벽하게 작동합니다. –