请告诉我此刻的情况。我不太明白flush()
使用输出流时该方法究竟如何工作。从我读到的内容来看,我明白独立缓冲区刷新和数据写入需要它。有专门BufferedOutputStream
用于BufferedWriter
字节和字符的缓冲流,其中有一个内部缓冲区,以免每次都访问外部源(文件、网络套接字等)。那么,在即时写入数据的常规“非缓冲”类中,这种方法有什么意义呢?
import java.io.*;
public class Program {
public static void main(String[] args) {
try(FileWriter writer = new FileWriter("note.txt")
{
String text = "Some text";
writer.write(text);
writer.flush();
}
catch(IOException ex){
System.out.println(ex.getMessage());
}
}
}
需要将数据直接发送到磁盘、网络或其他地方。
如果不进行刷新,这些数据(取决于流量)可能会停留在某个缓冲区中并等待其填满。
接口合规性。
对流进行操作的代码不需要知道流是否被缓冲。如果我们从非缓冲流中删除刷新方法,那么如果操作算法在某些情况下假设强制记录,那么这是不可能的。显然,无缓冲流在任何给定时间都处于相同的状态,就好像之前调用过 flush 方法一样,因此添加一个内部不执行任何操作的方法是一个非常优雅的解决方案。
PS:上面的代码示例
flush
对于任何流都是无用的,因为当块结束时,finally 将调用先前刷新的流关闭。来自方法文档
OutputStream::flush()
:因此在“无缓冲”类中,数据可以被缓冲。
缓冲主要是为了提高 I/O 性能。
例如,如果使用
FileWriter
,那么