我们是否需要显式关闭在方法参数中作为匿名 类 传递的 Streams 或 Readers?

Do we need to explicitly close Streams or Readers passed as anonymous classes in method parameters?

transformer = factory.newTransformer(new StreamSource(xslReader));

此外,是否需要明确关闭 Reader 和 Writer 类?如果这里传递了一个 InputStream 来代替 StreamSource 会怎么样 BufferedReader br = new BufferedReader(new InputStream("file.txt"));

不,您通常不需要关闭作为参数传递给您的方法的内容,除非您受合同约束这样做。

获得 Closeable 实例的人很可能也可以关闭它。

是的,您应该关闭声明为 Closeable 的内容,以及您自己实例化的内容,以防止资源泄漏。可关闭包装器(读取器、写入器、缓冲区等)在它们自身关闭时关闭它们的基础数据源,因此在您的(修改后的)示例中

var breader = new BufferedReader(new InputStreamReader(new FileInputStream("myFile")))
breader.close();

关闭 breader 将级联关闭操作,首先关闭 BufferedReader,然后关闭 InputStreamReader,最后关闭 FileInputStream,释放文件描述符并通知您的操作系统您已完成该文件的处理。