gpt4 book ai didi

java - RandomAccessFile.close() 是否在内部调用 FileChannel.force()?

转载 作者:行者123 更新时间:2023-11-29 09:26:15 27 4
gpt4 key购买 nike

作为事务的一部分,我正在使用 RandomAccessFile 对文件执行一些写入操作。在提交事务之前,我想绝对确定数据已写入磁盘。在 RAF 的 FileChannel 上调用 force(boolean) 似乎提供了这种保证,但它是在我关闭文件时隐式调用,还是必须手动调用?

此外,是否有人了解 force() 的实际作用,以及它的可信度有多大?操作系统是否可能报告数据已写入磁盘,而实际上它仍位于某个缓存中?此操作系统/硬盘/文件系统在多大程度上依赖于此?

最佳答案

这完全取决于 FS。但是如果您没有得到 (IO)Exception,您应该信任 JVM 并提交您的事务。您是否可以信任您的 FS 是另一个问题。例如,如果您使用已激活延迟分配的 ext4,即使在 RandomAccessFile#force(boolean) 成功返回后,您也可能会在瞬间断电时丢失数据。 JVM 依赖于操作系统的 FS-API,并不关心实际的实现和配置。

是的,您必须在关闭前调用 RandomAccessFile#force(boolean)。 #close 是否调用#force 取决于 FileChannel 的实现。

关于java - RandomAccessFile.close() 是否在内部调用 FileChannel.force()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com