在Javastream中flush()的目的是什么?

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

 fin.flush(); 

告诉我一些build议。

flush方法的文档 :

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

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

当我们给出任何命令时,该命令的stream被存储在我们的计算机中称为缓冲区(临时存储器位置)的存储器位置中。当所有的临时存储器位置都满时,我们使用flush()来刷新所有的数据stream并完全执行它们,并为缓冲区临时位置中的新stream提供新的空间 – 希望你能理解

当您将数据写入stream时,它不会立即写入,而是被caching。 所以当你需要确保写入缓冲区中的所有数据时,使用flush()。

我们需要确保在closuresstream之前完成所有写操作,这就是为什么flush()在文件/缓冲作者的close()中被调用的原因。

但是如果你有一个要求,在你closuresstream之前随时保存所有的写操作,使用flush()

stream通常由线程周期性地清空其内容来访问,例如,将其显示在屏幕上,将其发送到套接字或将其写入文件。 这是出于性能的原因。 刷新输出stream意味着您要停止,等待stream的内容完全传输到其目标,然后继续执行,并将stream清空并发送内容。

如果缓冲区已满,则所有缓冲的string将被保存到磁盘上。 缓冲区用于避免大交易! 和开销。

在放置在java库中的BufferedWriter类中,有一行如下所示:

 private static int defaultCharBufferSize = 8192; 

如果你想在缓冲区满之前发送数据,你确实有控制权。 只需冲洗它。 调用writer.flush()说,“现在发送什么在缓冲区!

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

页数:453

对于性能问题,首先将数据写入缓冲区。 当缓冲区满时,数据被写入输出(文件,控制台等)。 当缓冲区被部分填满,你想发送它到输出(文件,控制台),那么你需要手动调用flush()方法,以写入部分填充缓冲区输出(文件,控制台)。