Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在BufferedInputStream中嵌套FileInputStream是否会造成内存泄漏?_Java_Memory Leaks - Fatal编程技术网

Java 在BufferedInputStream中嵌套FileInputStream是否会造成内存泄漏?

Java 在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

如果我通过创建BufferedInputStream

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
异常