Java IO流中先关闭输出流还是先关闭输入流?为什么?

 我来答
百度网友8ff4cd2
2017-10-27
知道答主
回答量:4
采纳率:0%
帮助的人:2.5万
展开全部

java中需要手动释放的资源常见的有以下两个:

  1. 流相关资源

    流相关资源一般遵循:

    1)先开后关,先开的输入流,再开的输出流,通过读取输入流写入输出流中,那么应该先关输出流,再关输入流,但是一般关闭输入输出流操作都是在读写完成后的finally中执行的,所以即使先关输入流,再关输出流也不会任何问题,因为读写操作没有进行了。

    2)先关外层,再关内层。如BufferedInputStream包装了一个FileInputStream,那么先

    关BufferedInputStream,再关FileInputStream。但要注意的是由于一般处理流持有节点流引用,处理流都会在自己的close方法中去关闭节点流,因此我们只要关闭外层的处理流即可,如果多此一举的关闭节点流反而会报错。如BufferedInputStream包装了FileInputStream,我们只要关闭BufferedInputStream即可

    3)只关处理流,不关节点流,原因见上述第二条

    流相关文章参考:http://blog.csdn.net/u012250875/article/details/78341874

  2. jdbc相关资源

    Connection,PrepareStatement,ResultSet三个资源。这三个资源的获取顺序是:

    先获得一个jdbc连接对象Connection,再通过连接对象获得一个sql预处理对象PrepareStatement,如果是查询的话最后还会通过PrepareStatement对象获取一个结果集ResultSet对象,关闭顺序与获取顺序正好相反。先关ResultSet,再关PrepareStatement,最后关Connection。

镜幻时空
推荐于2018-02-27 · TA获得超过107个赞
知道答主
回答量:32
采纳率:100%
帮助的人:13.7万
展开全部

我最开始学的时候也觉得蛋疼,但是想到一个比喻之后豁然开朗,现在贡献出来.消防水龙头设为Out(输出流),自来水厂设为In(输入流).假设某地失火,消防水管被打开,相当于在写数据,消灭火灾后,不需要用水了,你首先会想到关闭自来水厂的对外供水还是关闭消防水龙头?

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友21647e5fc
2014-03-24 · TA获得超过709个赞
知道小有建树答主
回答量:149
采纳率:100%
帮助的人:143万
展开全部

这个没有规定先关闭哪个。

如果输入流和输出流之间没有关联的话,先关闭哪个都可以。


inputStream(outputStream)先关闭outputStream

outputStream(inputStream)先关闭inputStream。


总之就是先关闭里面(被引用)的。如果反过来,先关闭引用的,那么就无法关闭被引用的了,会导致IO不能即时释放。


另:这样子关闭io是比较正确的。

try{
    //io操作。
    //out.flush();
}catch(XxxException e){
    //异常处理
    throw e;
}finally{
    if(in != null){
        in.close();
    }
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式