首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要FileDescriptor "sync“和MappedByteBuffer "force"?

是否需要FileDescriptor "sync“和MappedByteBuffer "force"?
EN

Stack Overflow用户
提问于 2012-12-23 21:37:28
回答 1查看 826关注 0票数 1

当我想要确保MappedByteBuffer的更改应该同步回光盘时,我需要randomAcccessFile.getFD().sync()mappedByteBuffer.force(),还是两者都需要?(在我的简单测试中,它们似乎都不是必需的-令人困惑...)

有人对实际的底层操作有一个想法,或者至少可以解释差异吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-23 22:28:42

首先,FileDescriptor.sync等同于FileChannel.force (调用POSIX fsync方法)

第二,在Ron Hitchens (通过google books)关于MappedByteBuffer的章节中的"Java NIO“一书中说

MappedByteBuffer.force()类似于FileChannel类中同名的方法。它强制将对映射缓冲区所做的任何更改刷新到永久磁盘存储中。通过MappedByteBuffer对象更新文件时,应始终使用MappedByteBuffer.force()而不是FileChannel.force()。频道对象可能不知道通过映射缓冲区进行的所有文件更新。MappedByteBuffer不提供不刷新文件元数据的选项--它总是被刷新的。请注意,这里对非本地文件系统的注意事项与对FileChannel.force的注意事项相同

所以,是的。你需要给MappedByteBuffer.force打电话!

但后来我发现了this bug,这表明这两个调用仍然是必要的,至少在Windows上是这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14011398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档