我们都知道,关闭我们在代码末尾定义的所有StreamReader是一个好习惯。
现在我们可以看到两个读者定义如下。 BufferedReader和InputStreamReader.BufferedReader已关闭,但我们无法关闭InputStreamReader。
JAVA代码:
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
if (in != null) {
in.close();
}
问题出在这里,如果括号中的InputStreamReader应该关闭?这种代码会给程序带来一些问题吗?请告诉我,谢谢〜
答案 0 :(得分:2)
关闭您使用的任何资源非常重要。
in.close
将关闭BufferedReader,后者又关闭它自己使用的资源,即。 InputStreamReader。
因此,在你致电in.close
之前,假设没有异常发生,你正在做的就是关闭它们。
为了确保它被关闭,无论使用什么try-with-resources
,一旦你的阻止完成或发生异常,它会自动关闭它。
你可以这样做:
try(BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()))){/*code here*/}
保证try()
中的所有资源都已关闭。
答案 1 :(得分:0)
执行此操作没有问题,实际上Java API中的InputStreamReader
documentation就是这样做的。
在这种情况下,InputStreamReader
正在使用BufferedReader
,这意味着在调用BufferedReader
close()
函数时它们都会关闭:"关闭流并释放与其关联的所有系统资源。" 由于InputStreamReader
也非常清楚"关联" 随着流,它也将被关闭。
当您使用BufferedReader
这种方式构建InputStreamReader
时,它们实际上是捆绑在一起的读者,而不是两个不同的读者。