繁体   English   中英

try-with-resources 中的 ObjectOutputStream

[英]ObjectOutputStream in try-with-resources

我正在使用ObjectOutputStream将数据写入文件。 以下是代码片段。

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) 
{
    oos.writeObject(allObjects);
}

问题:

  1. 是否需要在try-with-resources中分别拆分OOS和FOS的对象构造? 我假设 OOS 在内部也关闭了 FOS。 所以上面的代码行应该没问题。
  2. 我需要显式调用 flush 吗?

问题是我在文件损坏后看到的问题,在调试时我遇到了上述查询。

  1. 否:关闭 ObjectOutputStream 会自动关闭 FileOutputStream

  2. 否:流将在关闭时自动刷新。

我认为开发商应该依赖公布的总合同。

没有证据表明ObjectOutputStreamclose()方法调用了flush()

我相信 OpenJDK 的ObjectOutputStream#close只是一个供应商实现。

如果我们刷新 try-with-resources 也不会造成伤害。

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) {
    oos.writeObject(allObjects);
    oos.flush(); // What's possibly going wrong with this?
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM