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