使用BufferedOutputStream编写大文件

use*_*894 5 java bufferedoutputstream

我正在尝试使用BufferedInputStream &读取和写入大文件(大于100 MB)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();        
Run Code Online (Sandbox Code Playgroud)

我的问题是当我们使用BufferedOutputStreeam它是否持有内存直到写出完整的文件?
使用大写文件的最佳方法是什么BufferedOutputStream

jta*_*orn 5

您提供的代码没有任何问题.你的记忆问题必须在别处.缓冲流具有固定的内存使用限制.

当然,确定导致OOME的最简单方法是让OOME生成堆转储,然后在内存分析器中检查该堆转储.