Java资源关闭
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java资源关闭,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1590字,纯文字阅读大概需要3分钟。
内容图文
![Java资源关闭](/upload/InfoBanner/zyjiaocheng/698/aa4943e2cdb342b3964e0c3bfed0f974.jpg)
我正在编写一个连接到网站并从中读取一行的应用程序.我是这样做的:
try{
URLConnection connection = new URL("www.example.com").openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String response = rd.readLine();
rd.close();
}catch (Exception e) {
//exception handling
}
好吗?我的意思是,我在最后一行关闭了BufferedReader,但我没有关闭InputStreamReader.我应该从connection.getInputStream创建一个独立的InputStreamReader,还是从独立的InputStreamReader创建一个BufferedReader,而不是关闭所有两个读者?
我认为最好将结束方法放在finally块中,如下所示:
InputStreamReader isr = null;
BufferedReader br = null;
try{
URLConnection connection = new URL("www.example.com").openConnection();
isr = new InputStreamReader(connection.getInputStream());
br = new BufferedReader(isr);
String response = br.readLine();
}catch (Exception e) {
//exception handling
}finally{
br.close();
isr.close();
}
但它很难看,因为关闭方法可以抛出异常,所以我必须处理或抛出它.
哪种解决方案更好?或者什么是最好的解决方案?
解决方法:
Java中资源获取和发布的一般习惯是:
final Resource resource = acquire();
try {
use(resource);
} finally {
resource.release();
}
注意:
>尝试应该立即跟随收购.这意味着你不能将它包装在装饰器中并保持安全(并删除空格或将东西放在一行上没有帮助:).
>每个最终发布一次,否则不会异常安全.
>避免使用null,使用final.否则你会有杂乱的代码和NPE的潜力.
>通常不需要关闭装饰器,除非它有与之相关的其他资源.但是,您通常需要刷新输出,但在异常情况下避免使用它.
>异常应该传递给调用者,或者从周围的try块中捕获(Java会让你误入歧途).
你可以用Execute Around idiom抽象这个废话,所以你不必重复自己(只需编写很多样板).
内容总结
以上是互联网集市为您收集整理的Java资源关闭全部内容,希望文章能够帮你解决Java资源关闭所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。