Написание больших файлов с использованием BufferedOutputStream - PullRequest
5 голосов
/ 24 февраля 2012

Я пытаюсь читать и записывать большие файлы (размером более 100 МБ), используя BufferedInputStream & BufferedOutputStream. У меня проблема с кучей памяти и исключение OOM.
Код выглядит так:

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?

1 Ответ

5 голосов
/ 24 февраля 2012

нет ничего плохого в коде, который вы предоставили. ваши проблемы с памятью должны лежать в другом месте. буферизованные потоки имеют фиксированный лимит использования памяти.

Самым простым способом определить, что вызвало OOME, является, конечно, заставить OOME создать дамп кучи, а затем проверить этот дамп кучи в профилировщике памяти.

...