flush()java文件处理

flush()的确切用法是什么? 流和缓冲区有什么区别? 为什么我们需要缓冲?

缓冲的优点是效率。 通常一次将4096字节的块写入文件比写入一个字节4096次更快。

缓冲的缺点是你错过了反馈。 对句柄的输出可以保留在内存中,直到写入足够的字节以使其值得写入文件句柄。 程序的一部分可能会将一些数据写入文件,但程序的不同部分或其他程序无法访问该数据,直到程序的第一部分将数据从内存复制到磁盘。 根据数据写入该文件的速度,这可能需要任意长的时间。

当您调用flush() ,即使缓冲区未满,您也要求操作系统立即将缓冲区中的任何数据写入文件句柄。

数据有时会在实际写入磁盘(缓冲区)之前进行缓存,刷新会导致缓冲区中的内容写入磁盘。

flush告诉输出流将所有数据发送到底层流。 由于内部缓冲,这是必要的。 缓冲区的主要目的是最小化对底层流API的调用。 如果我将长字节数组存储到FileOutputStream ,我不希望Java每个字节调用一次操作系统文件API。 因此,缓冲区用于Java内部和外部的各个阶段。 即使您每个字节调用一次fputc ,操作系统也不会每次都写入磁盘,因为它有自己的缓冲。