您只需要BufferedReader
在您的方案中关闭。
正如其他人指出的那样,JavaDocs是模棱两可的。当您想立即被调用时,使用 try-with-resources 块是最好的方法close
,但如果您需要保持阅读器打开(例如,具有返回使用潜在的读者——通常是调用者的责任在close
那里打电话)。
如果您无权访问源代码并想查看您的阅读器和 JVM 是否close
在您的情况下调用各种阅读器和流,您可以覆盖该close
方法作为一个简单的测试。
Path path = Paths.get("/home/example/test.txt");
InputStream fileInputStream = new FileInputStream(path.toFile()) {
public void close() throws IOException {
System.out.println("FileInputStream::close()");
super.close();
}
};
Reader inputStreamReader = new InputStreamReader(fileInputStream, Charsets.UTF_8) {
public void close() throws IOException {
System.out.println("InputStreamReader::close()");
super.close();
}
};
BufferedReader bufferedReader = new BufferedReader(inputStreamReader) {
public void close() throws IOException {
System.out.println("BufferedReader::close()");
super.close();
}
};
bufferedReader.close();
当您运行上述程序时,您会看到与以下内容非常相似的内容:
BufferedReader::close()
InputStreamReader::close()
FileInputStream::close()
由于 JavaDoc 中没有明确的规范,我们无法确定所有 JVM 的行为。但是,大多数阅读器/流似乎都遵循上述模式(例如,您可以GZIPInputStream
在上述示例中添加 a 并看到它GZIPInputStream::close()
也被调用)。