java - 我必须关闭多少个包装的 Java I/O 对象?

标签 java stream

我想将 Base64 编码的数据写入文件,并即时解码。我有

BufferedWriter bw = new BufferedWriter(
  new OutputStreamWriter(
    new Base64OutputStream(
      new FileOutputStream(myFile, false)));

我认为这有效,并且在我的 finally 中阻止我调用bw.close() -- 即 close the outermost wrapper 。这足够了吗?还是一些匿名中间对象会泄漏?

我尝试查看代码,但我被 Sun 专有的 OutputStreamWriter 编码处理程序实现所困扰。文档中似乎也没有明确说明这一点。

最佳答案

一般来说,关闭最外层的包装就足够了;每个包装器在关闭时都会关闭底层流。

可以创建一个不执行此操作的包装器,但这可能被视为错误,因为 FilterOutputStream 的文档要求调用 close "releases any system resources associated with the stream."

关于java - 我必须关闭多少个包装的 Java I/O 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19077642/

相关文章:

java - 带有部分的 Recyclerview,但每个部分仅带有页脚

java - 泛型扩展而不扩展 - 如何做

java - 使用一个套接字创建 2 个流

c++ - 警告 : control reaches end of non-void function [-Wreturn-type]

c# - 在 asp.net 3.5 中将 Stream 保存到文件的最佳方法?

Java 常量变量,命名约定

java - 将变量传递给 spring getter

java - .java 报告生成、方法调用者和被调用者

java - 为什么 Files.lines(和类似的 Streams)不会自动关闭?

stream - 通过 WCF 流式传输文件时出现 ArgumentNullException