在Java中,flush()
方法用于流。但我不明白使用这个方法的全部目的是什么?
fin.flush();
告诉我一些建议。从flush
方法的文档中可以了解到:
刷新输出流并强制写出任何缓冲的输出字节。 flush方法的通用契约是,如果输出流的实现已经缓冲了以前写入的任何字节,则调用它是一个指示,这些字节应立即被写入其预定目的地。
主要进行缓冲是为了提高I/O性能。更多信息可以从这篇文章中阅读:优化Java I/O性能。
flush()
。close()
中调用flush()
的原因。flush()
。FilterOutputStream
和FilterWriter
的Javadoc所保证的。 - user207421当我们输入任何命令时,计算机会将该命令的流存储在内存中称为缓冲区(一个临时的内存位置)。当所有临时内存位置都已满时,我们使用flush()函数,它会刷新所有数据流并完全执行它们,并在缓冲区临时位置中为新流提供新的空间。 -希望您能理解
BufferedOutputStream
、BufferedWriter
、ObjectOutputStream
和PrintXXX
类的情况下,任何其他流或Writer
的flush()
方法都不起作用。 - user207421BufferedWriter
,不需要显式调用 flush()
,只要你调用 close()
关闭写入器即可。close()
会自动执行 flush 操作。 - Yossarian42close()
会调用flush()
,因此在使用没有缓冲区的FileWriter
时,调用两者是多余的。 - Yossarian42如果缓冲区已满,则将缓冲区中的所有字符串保存到磁盘上。缓冲区用于避免大交易和开销。
在java libs中的BufferedWriter类中,有一行代码:
private static int defaultCharBufferSize = 8192;
流通常由周期性地清空其内容并将其显示在屏幕上、发送到套接字或写入文件的线程访问。这是出于性能原因。刷新输出流意味着您想停止,等待流的内容完全传输到其目标,然后使用空流和已发送的内容恢复执行。
针对性能问题,首先要将数据写入缓冲区。当缓冲区满时,数据将被写入输出(文件、控制台等)。当缓冲区部分填充而您想将其发送到输出(文件、控制台)时,则需要手动调用flush()方法,以便将部分填充的缓冲区写入输出(文件、控制台)。