gpt4 book ai didi

java - I/O 概念刷新与同步

转载 作者:IT老高 更新时间:2023-10-28 20:55:12 27 4
gpt4 key购买 nike

我遇到过这两个术语,我对它们的理解似乎相互重叠。 Flush 与缓冲区一起使用,而 sync 用于谈论文件到磁盘的持久更改。

在 C 中,fflush(stdin) 确保缓冲区被清除。并且 fsync 将更改文件持久化到磁盘。

如果这些概念没有被普遍定义,会更喜欢linux、java的解释。

我找到了一个相关的帖子,但我并没有真正回答我的问题。 Really force file sync/flush in Java

最佳答案

在 Java 中,flush() 方法用于输出流和写入器,以确保写入缓冲的数据。但是,根据 Javadocs:

If the intended destination of this stream is an abstraction provided by the underlying operating system, for example a file, then flushing the stream guarantees only that bytes previously written to the stream are passed to the operating system for writing; it does not guarantee that they are actually written to a physical device such as a disk drive.

另一方面,FileDescriptor.sync() 可用于确保将操作系统缓冲的数据写入物理设备(磁盘)。这与 Linux/POSIX 中的 sync 调用相同。

如果您的 Java 应用程序确实需要确保数据物理写入磁盘,您可能需要 flushsync,例如:

FileOutputStream out = new FileOutputStream(filename);

[...]

out.flush();
out.getFD().sync();

引用资料:

关于java - I/O 概念刷新与同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4072878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com