ByteArrayInputStream ed=new ByteArrayInputStream(new byte[]{1,2});
InputStream ed1=ed;
DataInputStream ed2=new DataInputStream(ed1);关闭
ed.close();
ed1.close();
ed2.close();
这样才算完全close。
还是只要随便close其中一个就可以了。
这里只是一个例子,比如封装文件流的时候,都一样,怎么关闭处理最重要。

解决方案 »

  1.   

    rs.close()/io.close()返回的结果集
    excutequery.close()执行的动作
    connection.close()当前连接
    session.close()当前会话
    基本上就是这么一个层次关系了
    总之,是用小到大一层层关闭的
      

  2.   

    最好都close这样释放他们占用的资源
    若不关闭,垃圾回收机制是对没有被引用的对象进行搜集,而且你无法控制它何时进行垃圾清理。 
      

  3.   

    ed2.close(); 
    ed1.close(); 
    ed.close(); 
    从内到外关了
    感觉这样的习惯最好就跟你用jdbc连数据库似的先关ResultSet,再preparedStatament,再connection一样。
      

  4.   

    最后建立的流,应当最先被close,最先建立的流最后close。每个都close一下,因为每个对象中都有可能有自己占用的资源,不仅是文件描述符。
      

  5.   

    还有就是我所说的流 和jdbc的流的 好像不同,
    我的封装更单一(就是对一个byte的封装,在或者比如一个文件文件流)
    ,而jdbc里面,可能存在n个流,也就是rs.close()/io.close()返回的结果集 rs 流封装了a
    excutequery.close()执行的动作       excutequery封装的是b
    connection.close()当前连接       connection封装的是c
    session.close()当前会话 a b c根本不是同一个东西这些流根本就不是分装的同一个东西,所以不能用来说明这个问题。(我没有看过jdbc的源码,也许在现实中 abc 流根本就是一个流。如果他们是一个流就可以说明这个问题)
    谢谢
      

  6.   

    只要关闭最外层的流就可以了。正因为如此,你经常可以在Java IO API中看到类似于这样的写法:
    Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
    在这种情况下,想要直接调用底层的OutputStreamWriter的close()方法是不可能的。但通过调用out.close()可以确保底层的OutputStreamWriter正确关闭。
    http://www.javapractices.com/topic/TopicAction.do?Id=8
      

  7.   

    关闭顺序对了..还有你最好写再try里面关闭
      

  8.   

    其实和数据库的jdbc连接关闭差不多了,由小到大,逐步释放资源,就是采取先开后关的策略
      

  9.   

    http://topic.csdn.net/u/20070405/22/8575ad41-2727-46bc-98dc-4df396797827.html>   就是不明白   怎么是把DataInputStream   关了另外2个可以不关,
    >   而不是把FileInputStream   关了剩下的2个过滤流可以不关就这个具体的例子而言,也可以只关闭   FileInputStream,另外两个不去管它。效果基本一样,反正关闭之后你也肯定不会再去操作那两个“尚未关闭的流对象”了。“关闭”真正有意义的事情在于“释放系统资源”。在这个例子里,只有   FileInputStream   占据了系统资源(打开了一个文件),另外两个流对象只是从数据处理角度做的包装(可能会占用一些内存,但不占用其它“系统资源”)。所以,只需要确保关闭了   FileInputStream   即可。在实际编程实践中,你不一定总能清楚地知道每层的流对象是否占据了系统资源,所以,最安全(也是最常规)的做法就是关闭最外层的那个对象。这种逐层包装的对象在实现上都会有一个特点,像“关闭”这种操作都会逐层向内调用。 
    这篇文章说出了真谛
    多谢大家参与 谢谢  结贴