try-with-resources中的ObjectOutputStream

时间:2018-03-21 17:47:58

标签: java flush fileoutputstream objectoutputstream

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

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

问题:

  1. 我是否需要在try-with-resources中单独拆分OOS和FOS的对象结构?我假设OOS内部也关闭了FOS。所以上面的代码行应该没问题。
  2. 我是否需要明确调用flush?
  3. 问题是我看到文件损坏后,在调试时我有上面提到的查询。

2 个答案:

答案 0 :(得分:4)

  1. 没有: 关闭Ob​​jectOutputStream将自动关闭FileOutputStream

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

答案 1 :(得分:0)

我相信开发人员应该依赖已发布的总合同。

没有证据表明ObjectOutputStream的{​​{1}}方法调用close()

我相信OpenJDK的flush()只是一个供应商实现。

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

ObjectOutputStream#close