是否需要关闭BufferedReader中的InputStreamReader

时间:2015-08-17 03:46:12

标签: java inputstreamreader

我们都知道,关闭我们在代码末尾定义的所有StreamReader是一个好习惯。

现在我们可以看到两个读者定义如下。 BufferedReader和InputStreamReader.BufferedReader已关闭,但我们无法关闭InputStreamReader。

JAVA代码:

BufferedReader in = new BufferedReader(new InputStreamReader(
    connection.getInputStream()));
if (in != null) {
    in.close();
    }

问题出在这里,如果括号中的InputStreamReader应该关闭?这种代码会给程序带来一些问题吗?请告诉我,谢谢〜

2 个答案:

答案 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时,它们实际上是捆绑在一起的读者,而不是两个不同的读者。