【发布时间】:2022-01-10 04:40:41
【问题描述】:
在File.writeAsBytes 的 dart.io 文档中
它提到了flush参数:
如果参数flush设置为true,写入的数据将被刷新 在返回的 future 完成之前到文件系统。
但我不知道“刷新到文件系统”是什么意思。
为什么有见识的人会选择将其设置为 true?
为什么有见识的人会选择将其设置为 false?
【问题讨论】:
在File.writeAsBytes 的 dart.io 文档中
它提到了flush参数:
如果参数flush设置为true,写入的数据将被刷新 在返回的 future 完成之前到文件系统。
但我不知道“刷新到文件系统”是什么意思。
为什么有见识的人会选择将其设置为 true?
为什么有见识的人会选择将其设置为 false?
【问题讨论】:
由于 I/O 传统上非常昂贵,因此您的代码和物理磁盘之间存在许多不同的缓冲区层,以尝试批处理/合并 I/O 操作以提高效率并避免让您的代码等待用于完成 I/O 操作。
“刷新到文件系统”意味着所有缓冲的写操作都已写入文件系统(这是物理磁盘之上的操作系统抽象)。例如,如果您调用File.writeAsBytes 而不 刷新,则尝试从该文件读取的其他内容可能仍会看到旧内容,即使相应的Future 已完成。如果您执行写入 with 刷新,则应保证在 Future 完成后对该文件的读取可以看到新内容。
为什么有见识的人会选择将其设置为 true?
如果您想确定何时写入数据,您可以选择显式刷新。
为什么有见识的人会选择将其设置为 false?
您可能不想刷新每个写入,因为这样做会更慢。例如,如果您要进行许多小型写入,最好在不刷新的情况下发出所有这些,然后可能在最后一次写入时刷新。
请注意,这是一个通用的操作系统概念,并不是 Dart 特有的。
【讨论】: