是否有必要关闭 BufferedReader 中的 InputStreamReader
Is it necessary to close an InputStreamReader in a BufferedReader
我们都知道关闭我们在代码末尾定义的所有StreamReader是一个好习惯。
现在我们可以看到两个读者定义如下。 BufferedReader 和 InputStreamReader.The BufferedReader 已关闭,但我们无法关闭 InputStreamReader。
JAVA代码:
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
if (in != null) {
in.close();
}
问题来了,括号里的InputStreamReader是否应该关闭?这样的代码会不会给程序带来一些问题?请告诉我,谢谢~
关闭您使用的任何资源很重要。
in.close
将关闭 BufferedReader,后者又关闭它本身使用的资源,即。 InputStreamReader.
假设在您调用 in.close
.
之前没有发生异常,那么您正在做的就是关闭它们
为了确保无论使用什么都关闭它try-with-resources
一旦你的块完成或发生异常时它会自动为你关闭它。
你可以这样做:
try(BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()))){/*code here*/}
保证关闭try()
中的所有资源
这样做没有问题,实际上 Java API 中的 InputStreamReader
documentation 做到了。
在这种情况下,InputStreamReader
正被 BufferedReader
使用,这意味着当 BufferedReader
close()
函数被调用时它们都将关闭: "Closes the stream and releases any system resources associated with it."由于InputStreamReader
也很清楚"associated"跟stream一样,所以也将关闭.
当您以这种方式使用 InputStreamReader
构建 BufferedReader
时,它们确实是相同的 reader 捆绑在一起,而不是两个不同的 reader。
我们都知道关闭我们在代码末尾定义的所有StreamReader是一个好习惯。
现在我们可以看到两个读者定义如下。 BufferedReader 和 InputStreamReader.The BufferedReader 已关闭,但我们无法关闭 InputStreamReader。
JAVA代码:
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
if (in != null) {
in.close();
}
问题来了,括号里的InputStreamReader是否应该关闭?这样的代码会不会给程序带来一些问题?请告诉我,谢谢~
关闭您使用的任何资源很重要。
in.close
将关闭 BufferedReader,后者又关闭它本身使用的资源,即。 InputStreamReader.
假设在您调用 in.close
.
为了确保无论使用什么都关闭它try-with-resources
一旦你的块完成或发生异常时它会自动为你关闭它。
你可以这样做:
try(BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()))){/*code here*/}
保证关闭try()
中的所有资源
这样做没有问题,实际上 Java API 中的 InputStreamReader
documentation 做到了。
在这种情况下,InputStreamReader
正被 BufferedReader
使用,这意味着当 BufferedReader
close()
函数被调用时它们都将关闭: "Closes the stream and releases any system resources associated with it."由于InputStreamReader
也很清楚"associated"跟stream一样,所以也将关闭.
当您以这种方式使用 InputStreamReader
构建 BufferedReader
时,它们确实是相同的 reader 捆绑在一起,而不是两个不同的 reader。