File.writeAsBytes 的 'flush' 参数在 Dart.io 中有什么作用?
What does the 'flush' argument of File.writeAsBytes do in Dart.io?
的 dart.io 文档中
它说的是 flush 参数:
If the argument flush is set to true, the data written will be flushed
to the file system before the returned future completes.
但是我不知道“刷新到文件系统”是什么意思。
为什么知识渊博的人会选择将其设置为 true?
为什么知识渊博的人会选择将其设置为 false?
由于 I/O 传统上非常昂贵,因此您的代码和物理磁盘之间存在许多不同的缓冲区层,以尝试 batch/coalesce I/O 操作以提高效率并避免让您的代码等待 I/O 操作完成。
“刷新到文件系统”意味着所有缓冲的写入操作都已写入文件系统(这是物理磁盘顶部的 OS 抽象)。例如,如果您调用 File.writeAsBytes
而没有 刷新,则尝试从该文件读取的其他内容可能仍会看到旧内容,即使相应的 Future
已经完全的。如果执行 with 刷新,那么应该保证在 Future
完成后读取该文件可以看到新内容。
Why would someone knowledgable choose to set it to true?
如果您想确切知道数据何时写入,您可以选择显式刷新。
Why would someone knowledgable choose to set it to false?
您可能不想刷新每 次写入,因为这样做会更慢。例如,如果您要进行许多小写操作,最好在不刷新的情况下发出所有这些操作,然后可能在最后一次写入时刷新。
请注意,这是一个通用的操作系统概念,并不特定于 Dart。
它说的是 flush 参数:
If the argument flush is set to true, the data written will be flushed to the file system before the returned future completes.
但是我不知道“刷新到文件系统”是什么意思。
为什么知识渊博的人会选择将其设置为 true?
为什么知识渊博的人会选择将其设置为 false?
由于 I/O 传统上非常昂贵,因此您的代码和物理磁盘之间存在许多不同的缓冲区层,以尝试 batch/coalesce I/O 操作以提高效率并避免让您的代码等待 I/O 操作完成。
“刷新到文件系统”意味着所有缓冲的写入操作都已写入文件系统(这是物理磁盘顶部的 OS 抽象)。例如,如果您调用 File.writeAsBytes
而没有 刷新,则尝试从该文件读取的其他内容可能仍会看到旧内容,即使相应的 Future
已经完全的。如果执行 with 刷新,那么应该保证在 Future
完成后读取该文件可以看到新内容。
Why would someone knowledgable choose to set it to true?
如果您想确切知道数据何时写入,您可以选择显式刷新。
Why would someone knowledgable choose to set it to false?
您可能不想刷新每 次写入,因为这样做会更慢。例如,如果您要进行许多小写操作,最好在不刷新的情况下发出所有这些操作,然后可能在最后一次写入时刷新。
请注意,这是一个通用的操作系统概念,并不特定于 Dart。