是否有必要关闭BufferedReader中的InputStreamReader

xia*_*alu 2 java inputstreamreader

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

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

JAVA代码:

BufferedReader in = new BufferedReader(new InputStreamReader(
    connection.getInputStream()));
if (in != null) {
    in.close();
    }
Run Code Online (Sandbox Code Playgroud)

问题来了,括号里的InputStreamReader是否应该关闭呢?这样的代码会不会给程序带来一些问题呢?请告诉我,谢谢~

Aeq*_*tas 6

关闭您使用的任何资源非常重要。

in.close将关闭 BufferedReader,进而关闭它本身使用的资源,即。输入流读取器。

因此,假设在调用之前没有发生异常,您所做的将关闭它们in.close

为了确保无论什么用途它都会关闭,try-with-resources一旦您的块完成或发生异常时,它会自动为您关闭它。

你可以这样做:

try(BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()))){/*code here*/}
Run Code Online (Sandbox Code Playgroud)

try()保证关闭所有资源。

  • 是的,但问题是,OP是否需要自己关闭`InputStreamReader`...`try (InputStreamReader is = new InputStreamReader(...); BufferedReader br = new BufferedReader (is)) {...}` (4认同)