是否有必要关闭 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。