我使用的RandomAccessFile执行一些写入一个文件作为事务的一部分。之前,我将我的交易,我想绝对确保数据被写入磁盘。 在英国皇家空军的force(boolean)调用FileChannel似乎提供这种保证,但它是隐式调用,当我关闭文件,或做我必须手动调用它呢?

此外,没有任何人有任何洞察force()实际上做,并且多远它是可以信任的?是否有可能使OS可能会报告数据已写入磁盘的时候,其实它仍然坐在一些缓存的地方?到什么程度是这样的OS / HDD /文件系统依赖

有帮助吗?

解决方案

这是完全FS相关的。但是,如果你没有得到一个(IO)异常,你应该相信JVM和提交事务。您是否可以信任你的FS是另一个问题。例如,如果您使用的ext4已经延迟分配激活时,你可能会失去的RandomAccessFile#力(布尔)甚至后成功返回瞬间功率损失数据。 JVM的依赖于操作系统的FS-API和不关心实际执行和配置。

是的,你必须关闭之前调用RandomAccessFile的#力(布尔)。是否#关闭调用#force要由FileChannel的实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top