Java:RandomAccessFile Mode “rws” vs “rwd”?

2022-09-03 13:22:06

RandomAccessFile 构造函数接受一个字符串,该字符串指定应如何打开文件。mode

我对和模式之间的区别感到困惑。"rws""rwd"

以下是文档声明的内容:

“rws” 与“rw”一样,开放用于读取和写入,并且还要求对文件内容或元数据的每次更新都同步写入底层存储设备。

“rwd” 与“rw”一样,开放用于读取和写入,并且还要求对文件内容的每次更新都同步写入底层存储设备。

[...]

“rwd”模式可用于减少执行的 I/O 操作数。使用“rwd”只需要将文件内容的更新写入存储;使用“rws”需要更新文件的内容和要写入的元数据,这通常需要至少一个低级 I/O 操作。

...并且没有解释这意味着什么。这是否意味着更新了文件系统上上次修改的时间戳,而不是?metadata"rws""rwd"


答案 1

这是否意味着“rws”更新了文件系统上上次修改的时间戳,而“rwd”没有?

rws 会刷新文件的内容和文件的修改日期。

rwd 会刷新文件的内容,但在文件关闭之前,修改日期可能不会更改。

rw 仅在您告诉它时才刷新,并且在您关闭文件之前不会更改修改日期。

BTW rwd 的写入速度比 rw 慢得多,而 rws 的速度也慢得多。


答案 2

有关文件通道 API 中的文件元数据的一些信息 http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html

...The file may also have some associated metadata such as access permissions, content type, and last-modification time...

此外,API提供了有关rws和rwd之间差异的更多信息(尽管从未提及名称)FileChannel.force(boolean metadata)