flush()java文件处理

flush()java文件处理,java,file-handling,Java,File Handling,flush()的确切用途是什么?流和缓冲区之间的区别是什么?为什么需要缓冲区?flush告诉输出流将所有数据发送到底层流。这是必要的,因为内部缓冲。缓冲区的基本用途是最小化对底层流API的调用。如果将长字节数组存储到文件输出流,我不希望Java每个字节调用一次操作系统文件API。因此,缓冲区在Java内部和外部的不同阶段都被使用。即使每个字节调用一次,操作系统也不会每次都真正写入磁盘,因为它有自己的缓冲。数据有时会在实际写入磁盘(缓冲区中)之前被缓存。刷新会导致缓冲区中的内容写入磁盘。缓冲的优点

flush()的确切用途是什么?流和缓冲区之间的区别是什么?为什么需要缓冲区?

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

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

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

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

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