flush() 的具体用途是什么?流和缓冲区有什么区别?为什么我们需要缓冲?
问问题
14839 次
3 回答
14
缓冲的优点是效率。通常,将一个 4096 字节的块写入文件一次比将一个字节写入 4096 次要快。
缓冲的缺点是你错过了反馈。到句柄的输出可以保留在内存中,直到写入足够的字节以使其值得写入文件句柄。程序的一部分可能会将一些数据写入文件,但程序的另一部分或其他程序无法访问该数据,直到程序的第一部分将数据从内存复制到磁盘。根据数据写入该文件的速度,这可能需要任意长的时间。
当您调用 时flush()
,您要求操作系统立即将缓冲区中的任何数据写入文件句柄,即使缓冲区未满也是如此。
于 2010-10-28T06:11:50.473 回答
5
数据有时会在实际写入磁盘(在缓冲区中)之前被缓存,刷新会导致缓冲区中的内容被写入磁盘。
于 2010-10-28T06:05:06.913 回答
3
flush
告诉输出流将所有数据发送到底层流。由于内部缓冲,这是必要的。缓冲区的基本目的是尽量减少对底层流 API 的调用。如果我将一个长字节数组存储到 aFileOutputStream
中,我不希望 Java 每个字节调用一次操作系统文件 API。因此,缓冲区在 Java 内部和外部的各个阶段都使用。即使您确实fputc
每个字节调用一次,操作系统也不会每次都真正写入磁盘,因为它有自己的缓冲。
于 2010-10-28T06:04:49.213 回答