Java:RandomAccessFile模式"rws"vs"rwd"?

Cri*_*scu 13 java file-io metadata java-io

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

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

这是文档所说的内容:

"rws"用于读写,与"rw"一样,并且还要求将文件内容或元数据的每次更新同步写入底层存储设备.

"rwd"用于读写,与"rw"一样,并且还要求将文件内容的每次更新同步写入底层存储设备.

[...]

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

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

Pet*_*rey 15

这是否意味着"rws"更新文件系统上的最后修改时间戳,而"rwd"不会?

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

rwd刷新文件的内容,但修改日期可能不会更改,直到文件关闭.

rw只在你告诉它时刷新,并且在你关闭文件之前不会改变修改日期.

写入时的BTW rwd比rw慢得多,并且rws再次变慢.

  • @fge 当您更改内容时,即使使用“rw”,这些更改也会立即可见。我在我编写的库中使用它来在进程之间共享数据,并且延迟可以低至 100 ns。它实际上不做的是将数据写入磁盘,因此即使看起来信息已更改,但数据尚未在磁盘上。使用“rws”/“rwd”可确保在继续之前将数据写入磁盘,例如防止在操作系统崩溃或电源故障时丢失数据。 (2认同)