在Java中,在流中使用flush()
方法。但我不明白使用这种方法的目的是什么?
fin.flush();
告诉我一些建议。
答案 0 :(得分:88)
来自flush
方法的docs:
刷新输出流并强制写出任何缓冲的输出字节。 flush的一般合同是调用它表示,如果先前写入的任何字节已被输出流的实现缓冲,则应立即将这些字节写入其预期目的地。
缓冲主要是为了提高I / O性能。有关这方面的更多信息,请参阅本文:Tuning Java I/O Performance。
答案 1 :(得分:25)
当我们发出任何命令时,该命令的流存储在我们计算机中称为缓冲区(临时内存位置)的内存位置。当所有临时内存位置都已满时,我们使用flush(),它刷新所有数据流并完全执行它们,并为缓冲区临时位置中的新流提供新空间。 - 希望你能理解
答案 2 :(得分:20)
当您将数据写入流时,它不会立即写入,而是缓冲的。因此,当您需要确保写入缓冲区中的所有数据时,请使用flush()。
我们需要确保在关闭流之前完成所有写操作,这就是在文件/缓冲编写器的close()中调用flush()的原因。
但是,如果您要求在关闭流之前随时保存所有写入,请使用flush()
答案 3 :(得分:7)
如果缓冲区已满,所有缓冲在其上的字符串将被保存到磁盘上。缓冲区用于避免大交易!和开销。
在放置在java libs中的BufferedWriter类中,有一行如:
private static int defaultCharBufferSize = 8192;
如果您确实希望在缓冲区已满之前发送数据,则可以进行控制。只是冲洗它。调用writer.flush()说,“现在发送缓冲区中的任何内容!
参考书:https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
的网页:453
答案 4 :(得分:4)
Streams通常由定期清空其内容的线程访问,例如,将其显示在屏幕上,将其发送到套接字或将其写入文件。这是出于性能原因而完成的。刷新输出流意味着您要停止,等待流的内容完全传输到其目标,然后在流为空并发送内容的情况下继续执行。
答案 5 :(得分:3)
对于性能问题,首先将数据写入Buffer。当缓冲区变满时,数据将写入输出(文件,控制台等)。当缓冲区部分填充并且您想将其发送到输出(文件,控制台)时,您需要手动调用flush()方法,以便将部分填充的缓冲区写入输出(文件,控制台)。
答案 6 :(得分:0)
除了这里的其他好答案之外,这种解释对我也很清楚:
缓冲区是内存中用于存储数据流的一部分 (字符)。这些字符有时只会发送到 缓冲区已满或遇到缓冲区溢出时的输出设备(例如监视器) 一定数量的字符。如果您这样做会导致系统延迟 只有几个字符要发送到输出设备。 flush() 方法将立即将缓冲区的内容刷新到输出 流。