File.writeAsBytes 的 'flush' 参数在 Dart.io 中起什么作用?

Boo*_*unz 2 io byte file dart flutter

在File.writeAsBytes的 dart.io 文档中

它谈到了冲洗论证:

如果参数flush设置为true,写入的数据将在返回的future完成之前刷新到文件系统。

但我不知道“刷新到文件系统”是什么意思。

为什么有知识的人会选择将其设置为 true?

为什么有知识的人会选择将其设置为 false?

jam*_*lin 8

由于 I/O 传统上非常昂贵,因此代码和物理磁盘之间存在许多不同的缓冲区层,以尝试批处理/合并 I/O 操作以提高效率,并避免让代码等待 I/O O 操作完成。

“刷新到文件系统”意味着所有缓冲的写操作都已写入文件系统(这是物理磁盘之上的操作系统抽象)。例如,如果您File.writeAsBytes 在不刷新的情况下调用,则尝试从该文件读取的其他内容可能仍然会看到旧内容,即使相应的内容Future已完成。如果您通过刷新执行写入,则应保证该文件的读取在Future完成后看到新内容。

为什么有知识的人会选择将其设置为 true?

如果您想确切地知道数据何时被写入,您可以选择显式刷新。

为什么有知识的人会选择将其设置为 false?

您可能不想刷新每次写入,因为这样做会更慢。例如,如果您正在进行许多小写入,那么最好在不刷新的情况下发出所有这些写入,然后可能在最后一次写入时刷新。

请注意,这是一个通用的操作系统概念,并不特定于 Dart。