【问题标题】:ObjectOutputStream in try-with-resources资源尝试中的 ObjectOutputStream
【发布时间】:2018-08-30 23:40:16
【问题描述】:

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

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

问题:

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

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

【问题讨论】:

标签: java flush fileoutputstream objectoutputstream


【解决方案1】:
  1. 否: 关闭 ObjectOutputStream 会自动关闭 FileOutputStream

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

【讨论】:

    【解决方案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?
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多