【问题标题】:What does the 'flush' argument of File.writeAsBytes do in Dart.io?File.writeAsBytes 的 'flush' 参数在 Dart.io 中有什么作用?
【发布时间】:2022-01-10 04:40:41
【问题描述】:

在File.writeAsBytes 的 dart.io 文档中

它提到了flush参数:

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

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

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

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

【问题讨论】:

    标签: flutter file dart io byte


    【解决方案1】:

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

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

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

    如果您想确定何时写入数据,您可以选择显式刷新。

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

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

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

    【讨论】:

    • 所以在所有内容都写入文件之前,flush 不会清理缓冲区吗?因为我认为即使写入过程尚未完成,flush 命令也会清除缓冲区中的所有内容。
    • @SardorbekR “清理缓冲区”是什么意思?刷新会将缓冲区的已使用部分写入文件系统。
    • 最初我认为flush会删除缓冲操作)但现在我知道它的工作方式不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2011-11-10
    相关资源
    最近更新 更多