在 Java 流中刷新()的目的是什么?

在 Java 中,在流中使用 flush()方法。但是我不明白使用这种方法的目的是什么?

fin.flush();

告诉我一些建议。

282906 次浏览

根据 flush方法的 医生:

刷新输出流并强制写出所有缓冲的输出字节。刷新的一般约定是,调用它表明,如果先前写入的任何字节已经被输出流的实现缓冲,那么这些字节应该立即写入到它们的预期目的地。

缓冲主要是为了提高 I/O 性能。

流经常被定期清空内容的线程访问,例如,在屏幕上显示、发送到套接字或将其写入文件。这样做是出于性能原因。刷新输出流意味着您希望停止,等待流的内容完全传输到其目的地,然后在流为空并发送内容的情况下恢复执行。

将数据写入流时,不会立即写入数据,而是对数据进行缓冲。因此,当需要确保写入了来自 buffer 的所有数据时,请使用 flush()

我们需要确保在关闭流之前完成所有写操作,这就是为什么在 file/buffer writer 的 close()中调用 flush()的原因。

但是,如果需要在关闭流之前随时保存所有写操作,请使用 flush()

当我们发出任何命令时,该命令的流存储在计算机中称为 buffer (一个临时内存位置)的内存位置中。当所有的临时内存位置都满了的时候,我们就使用 flash () ,它刷新所有的数据流并完全执行它们,并在缓冲区临时位置为新的流提供一个新的空间。 希望你能理解

对于性能问题,首先要将数据写入 Buffer。当缓冲区满时,数据被写入输出(文件,控制台等)。当缓冲区部分填充并且您想要将其发送到输出(文件,控制台)时,您需要手动调用 ush ()方法,以便将部分填充的缓冲区写入到输出(文件,控制台)。

如果缓冲区已满,则缓冲在缓冲区上的所有字符串都将保存到磁盘上。缓冲区是用来避免从大交易!还有头顶。

在 java 库中的 BufferedWriter 类中,有一行如下:

private static int defaultCharBufferSize = 8192;

如果您确实希望在缓冲区满之前发送数据,那么您确实拥有控制权。把它冲掉。对 writer.rush ()的调用说,“现在发送缓冲区中的任何内容!

参考书: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208

页数: 453

除了这里的其他好答案,这个解释对我来说非常清楚:

缓冲区是内存中用于存储数据流的部分 (字符)。这些字符有时只会被发送到 当缓冲区已满或遇到 一定数量的字符。这可能导致您的系统延迟,如果您 只有几个字符要发送到输出设备 方法将立即将缓冲区的内容刷新到输出 溪流。

资料来源: https://www.youtube.com/watch?v=MjK3dZTc0Lg