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

Ven*_*kat 110 java flush java-stream

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

fin.flush();
Run Code Online (Sandbox Code Playgroud)

告诉我一些建议.

cod*_*ict 94

文档中的flush方法:

刷新输出流并强制写出任何缓冲的输出字节.flush的一般契约是调用它表示,如果先前写入的任何字节已被输出流的实现缓冲,则应立即将这些字节写入其预期目的地.

缓冲主要是为了提高I/O性能.有关这方面的更多信息,请参阅本文:调优Java I/O性能.

  • flush方法仅用于缓冲流吗?是否有将其与其他流(例如输出流)一起使用的优势? (3认同)
  • 也许“齐平”这个词不应该出现在它的定义中。对于理解新事物来说,递归定义是一个坏主意。我知道你没有写定义。 (2认同)

小智 26

当我们发出任何命令时,该命令的流存储在我们计算机中称为缓冲区(临时内存位置)的内存位置.当所有临时内存位置都已满时,我们使用flush(),它刷新所有数据流并完全执行它们,并为缓冲区临时位置中的新流提供新空间. - 希望你明白


Bim*_*thy 24

将数据写入流时,不会立即写入,而是缓冲.因此,当您需要确保写入缓冲区中的所有数据时,请使用flush().

我们需要确保在关闭流之前完成所有写操作,这就是在文件/缓冲编写器的close()中调用flush()的原因.

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

  • 在关闭之前调用flush是多余的,对吧?它就像简单地调用close一样. (7认同)
  • @BimanTripathy我可以说100%保证.它由`FilterOutputStream`和`FilterWriter`的Javadoc保证. (2认同)

Sem*_*van 7

如果缓冲区已满,所有缓冲在其上的字符串将被保存到磁盘上.缓冲区用于避免大交易!和开销.

在放置在java libs中的BufferedWriter类中,有一行如下:

private static int defaultCharBufferSize = 8192;
Run Code Online (Sandbox Code Playgroud)

如果您确实希望在缓冲区已满之前发送数据,则可以进行控制.只是冲洗它.调用writer.flush()说,"现在发送缓冲区中的任何内容!

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

页数:453


Ehs*_*veh 7

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

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

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