2

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

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

4

1 回答 1

0

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

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

于 2009-07-02T12:27:29.033 回答