黑马程序员技术交流社区
标题:
关闭IO流的疑问
[打印本页]
作者:
任亚俊
时间:
2014-1-2 16:45
标题:
关闭IO流的疑问
finally{
//疑问:两个捕获可不可以放到一块呢,怎样处理关闭流时的异常最好呢?
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
复制代码
作者:
其LovE斤
时间:
2014-1-2 20:40
流的关闭是为了释放流调用的底层的系统资源。而流本身是通过系统回收处理掉的。
在流的关闭上;
比如 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 没有关系。那么就必须都关闭。
最好是分开关闭,捕获两个异常,明确如果出现异常后具体是谁出问题了。
作者:
任亚俊
时间:
2014-1-2 20:44
其LovE斤 发表于 2014-1-2 20:40
流的关闭是为了释放流调用的底层的系统资源。而流本身是通过系统回收处理掉的。
在流的关闭上;
比如 B ...
谢谢啊,说的挺有道理的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2