BufferedInputStream
& BufferedOutputStream
を使用して大きなファイル(100 MB以上)を読み書きしようとしています。ヒープメモリの問題が発生しました& OOMの例外です。
コードのようになります。私たちはBufferedOutputStreeam
を使用するときに私の質問があるBufferedOutputStreamを使用して大きなファイルを書き込む
BufferedInputStream buffIn = new BufferedInputStream(iStream);
/** iStream is the InputStream object **/
BufferedOutputStream buffOut=new BufferedOutputStream(new FileOutputStream(file));
byte []arr = new byte [1024 * 1024];
int available = -1;
while((available = buffIn.read(arr)) > 0) {
buffOut.write(arr, 0, available);
}
buffOut.flush();
buffOut.close();
は、それが完全なファイルまでのメモリを保持するが書き出されるのですか?
BufferedOutputStream
を使用して大きなファイルを書き込む最も良い方法は何ですか?
ループ内でフラッシュを試してください。 –
フラッシュするまでバッファリングしています。 whileループでそれをフラッシュします。 –
@jcomeau_ictx - いいえ、BufferedOutputStreamは、フラッシュするまでバッファーされません。内部バッファーのサイズは固定されています。 – jtahlborn