【发布时间】:2011-04-13 13:45:44
【问题描述】:
在 https://stackoverflow.com/questions/730521/really-force-file-sync-flush-in-java,作者在答案摘要中写道:
对 Java NIO 使用 c.force(true) 后跟 s.getFD().sync()
我的问题是:你真的需要两者吗?力量不够吗?强制和同步不只是做同一件事的不同接口吗?我找不到任何可以证实这一点的地方。
【问题讨论】:
在 https://stackoverflow.com/questions/730521/really-force-file-sync-flush-in-java,作者在答案摘要中写道:
对 Java NIO 使用 c.force(true) 后跟 s.getFD().sync()
我的问题是:你真的需要两者吗?力量不够吗?强制和同步不只是做同一件事的不同接口吗?我找不到任何可以证实这一点的地方。
【问题讨论】:
我的理解是正确的答案是否定的。
FileChannel.force 调用fdatasync 或fsync。这可以在 OpenJDK 源代码的 jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 中看到。 FileDescriptor 调用 fsync (发现这个比较复杂。我最后追踪到了 jvm.cpp)。
我是链接问题的“作者”。所以我错了。 FileOutputStream.flush. 还不够,因为它是无操作的。因此,您需要强制或同步。
【讨论】: