流的关闭是为了释放流调用的底层的系统资源。而流本身是通过系统回收处理掉的。
在流的关闭上;
比如 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 没有关系。那么就必须都关闭。
最好是分开关闭,捕获两个异常,明确如果出现异常后具体是谁出问题了。 |