Java 在BufferedInputStream中嵌套FileInputStream是否会造成内存泄漏?
如果我通过创建BufferedInputStreamJava 在BufferedInputStream中嵌套FileInputStream是否会造成内存泄漏?,java,memory-leaks,Java,Memory Leaks,如果我通过创建BufferedInputStream FileInputStream fos = new FileInputStream(FILE_TO_READ); BufferedInputSteam bos new BufferedInputSteam(fos); … bos.close(); fos.close(); 我可以显式关闭FileInputStream。但是如果我创建它的话 BufferedInputSteam bos new BufferedInputSteam(new F
FileInputStream fos = new FileInputStream(FILE_TO_READ);
BufferedInputSteam bos new BufferedInputSteam(fos);
…
bos.close();
fos.close();
我可以显式关闭FileInputStream。但是如果我创建它的话
BufferedInputSteam bos new BufferedInputSteam(new FileInputStream(FILE_TO_READ));
…
bos.close();
我无法显式关闭FileInputStream
这是内存泄漏吗?
InputStream
类基于Decorator模式,因此没有内存问题,它将被正确关闭
您只需关闭顶层InputStream
bos.close();
我不这么认为。根据找到的Java文档 关闭此文件输入流并释放与该流关联的所有系统资源 如果此流具有关联的通道,则该通道也将关闭
您无法关闭底层输入流,因为
BufferedInputSteam
会为您关闭它。这是为了方便,而且是合理的。想想看,*为什么要允许您独立于封装它的BufferedInputSteam
访问底层FileInputStream
?这样的访问可能会使您中断缓冲数据流
尝试关闭一个已经关闭的流将给您一个IOException:stream ready closed
异常