大きなファイルをコピーするこのセグメントを使用しています。Androidは、正確に32のバッファロードで「メモリ不足」でクラッシュします。これは、dos.writeがデータをI / Oデバイスにスプールするのではなく、大きなバッファに入れるように機能します。例外はスローされません。
bufferSize = 512*1024。bisはBufferedInputStreamです。byteArrayはByteArrayBufferであり、
try {
FileOutputStream fos = new FileOutputStream(file);
dos = new DataOutputStream(fos);
int current = 0;
while((current = bis.read()) != -1){
byteArray.append((byte)current);
if (byteArray.isFull()){
byte[] b = byteArray.toByteArray();
dos.write(b, 0, bufferSize);
byteArray.clear();
}
}
int count = byteArray.length();
byte[] b = byteArray.toByteArray();
dos.write(b, 0, count);
dos.flush();
dos.close();
bis.close();
}
catch (Exception e) {
RunTimeError("Exception: " + e);
return false;
}