5

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();        

我的问题是当我们使用它时BufferedOutputStreeam它是否会保留内存直到完整的文件被写出?
使用 编写大文件的最佳方法是什么BufferedOutputStream

4

1 回答 1

5

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

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

于 2012-02-24T04:40:25.340 回答