FileChannel.force 和 FileDescriptor.sync 都需要吗?

发布于 2024-10-31 21:11:11 字数 351 浏览 4 评论 0原文

https://stackoverflow.com/questions/730521/really-force-file -sync-flush-in-java,作者在答案摘要中写道:

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

我的问题是:你真的需要两者吗?实力还不够吗?强制和同步不只是做同样事情的不同接口吗?我找不到任何地方可以证实这一点。

In https://stackoverflow.com/questions/730521/really-force-file-sync-flush-in-java, the author writes in the summary of the answers:

Use c.force(true) followed by s.getFD().sync() for Java NIO

My question is: do you really need both? Isn't force enough? Aren't force and sync just different interfaces for doing the same thing? I can't find anyplace where this is confirmed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一生独一 2024-11-07 21:11:11

我的理解是,正确的答案是“否

”。 FileChannel.force 调用 fdatasyncfsync。这可以在 OpenJDK 源代码的 jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 中看到。
FileDescriptor 调用 fsync (要找到这个out 更复杂。我最终追踪到了 jvm.cpp)。

我是链接问题的“作者”。所以我错了。还不够的是 FileOutputStream.flush. 因为它是一个无操作。因此,您要么需要强制,要么需要同步。

My understanding is that the correct answer is No.

FileChannel.force calls fdatasync or fsync. This can be seen in jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c on of the OpenJDK source code.
FileDescriptor calls fsync (To find this out was more complex. I finally traced it to jvm.cpp).

I am the "author" of the linked question. So I was wrong. What is NOT enough is FileOutputStream.flush. because it is a no-op. You therefore either need force or sync.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文