Я пытаюсь читать и писать большие файлы (размером более 100 МБ), используя BufferedInputStream
& BufferedOutputStream
. Я получаю проблему с памятью кучи & исключение OOM.
код выглядит следующим образом:Написание больших файлов с использованием 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();
Мой вопрос, когда мы используем BufferedOutputStreeam
он держит в памяти до полного файла записывается?
Каков наилучший способ записи больших файлов с помощью BufferedOutputStream
?
попробуйте промыть внутри петли –
это буферизация, пока вы не промойте ее. закройте его в цикле while. –
@jcomeau_ictx - no, BufferedOutputStream не буферизует, пока вы не очистите его, он имеет фиксированный размер внутреннего буфера. – jtahlborn