java 只需要关闭上层流,java io 流的关闭

Java的IO流采用装饰模式,关闭最外层流时会自动调用内部流的close()方法。通常建议从外层流开始关闭,遵循先打开后关闭的原则。如果流之间存在依赖,应当先关闭不依赖其他流的那部分。示例代码展示了从外到内关闭流的正确顺序,反之则可能引发IOException。
摘要由CSDN通过智能技术生成

问题:

(1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗?

(2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭?

问题(1)解释:

69c5a8ac3fa60e0848d784a6dd461da6.png

如下例子代码:

FileInputStream is= new FileInputStream(".");

BufferedInputStream bis= newBufferedInputStream(is);

bis.close();

从设计模式上看:

java.io.BufferedInputStream是java.io.InputStream的装饰类。

BufferedInputStream装饰一个 InputStream 使之具有缓冲功能,is要关闭只需要调用最终被装饰出的对象的 close()方法即可,因为它最终会调用真正数据源对象的 close()方法。

BufferedInputStream的close方法中对InputStream进行了关闭,下面是jdk中附带的源代码:

java.io.BufferedInputStream的api:

closepublic void close()throws IOException 关闭此输入流并释放与该流关联的所有系统资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值