是否需要FileChannel.force和FileDescriptor.sync?

njl*_*son 9 java io storage nio

/sf/ask/51136501/中,作者在答案摘要中写道:

对于Java NIO,使用c.force(true),然后使用s.getFD().sync()

我的问题是:你真的需要两者吗?力不够吗?是不是强制和同步只是不同的接口做同样的事情?我找不到任何确认的地方.

dme*_*ter 12

我的理解是,正确答案是否定的.

FileChannel .force调用fdatasyncfsync.这可以在OpenJDK源代码的jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c中看到. FileDescriptor调用fsync(要发现它更复杂.我最终将其追溯到jvm.cpp).

我是相关问题的"作者".所以我错了.FileOutputStream.flush是不够的.因为它是无操作的.因此,您需要强制或同步.