A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任亚俊 中级黑马   /  2014-1-2 16:45  /  1019 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. finally{
  2.                                 //疑问:两个捕获可不可以放到一块呢,怎样处理关闭流时的异常最好呢?
  3.                                 try {
  4.                                         in.close();
  5.                                 } catch (IOException e) {
  6.                                         e.printStackTrace();
  7.                                 }
  8.                                 try {
  9.                                         socket.close();
  10.                                 } catch (IOException e) {
  11.                                         e.printStackTrace();
  12.                                 }
  13.                         }
复制代码


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
流的关闭是为了释放流调用的底层的系统资源。而流本身是通过系统回收处理掉的。
在流的关闭上;
    比如  BufferedReader   buf = new BufferedReader(new FileReader("....."));
                      这个关闭掉  buf,因为FileReader没有对象实例
            BufferedReader   buf = new BufferedReader( fileReader );  
                      这个关闭掉   fileReader 就可以了。关闭离底层最近的。buf不用关了就。
凡是通过套接字获取到的流,比如getInputStream。关闭掉套接字就可以了。不用关闭通过该套接字
获取到的流。因为底层资源已经释放掉了。
流用不用关闭,在于这个流调用的底层资源释放掉了没有。
     
我这里将你的in 理解为一个输入流
socket理解为是一个套接字,感觉是客户端的套接字
你的in流  和  socket套接字有关联吗?
如果 in流  是通过socket套接字的getInputStream获取到的。
那么只关闭 socket就可以了。

如果你的 in  和  socket  没有关系。那么就必须都关闭。
最好是分开关闭,捕获两个异常,明确如果出现异常后具体是谁出问题了。
回复 使用道具 举报
其LovE斤 发表于 2014-1-2 20:40
流的关闭是为了释放流调用的底层的系统资源。而流本身是通过系统回收处理掉的。
在流的关闭上;
    比如  B ...

谢谢啊,说的挺有道理的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马