Java:OutputStream类的flush()方法的使用
2020-08-20 08:09:17
最近使用java的FileOutputStream写文件,调用到了flush()方法,但是并没有什么作用。
查看 FileInputStream 类的源代码,发现flush()是继承于其父类OutputStream的。从函数的说明中可以看到 "The flush
method of OutputStream
does nothing",也就是说OutputStream类的flush()却什么也没做。
其实flush()是Flushable接口的方法,官方文档的对该方法的注释是“Flushes this output stream and forces any buffered output bytes to be written out.”。
那flush()方法什么时候用呢?其实,当OutputStream是BufferedOutputStream时,这个函数才会有效。
当写文件需要flush()的效果时,需要
FileOutputStream fos = new FileOutputStream(ca.txt);
BufferedOutputStream bos = new BufferedOutputStream(fos);
也就是说,需要将FileOutputStream作为BufferedOutputStream构造函数的参数传入,然后对BufferedOutputStream进行写入操作,才能利用缓冲及flush()。
查看BufferedOutputStream的源代码,发现所谓的buffer其实就是一个byte[]。
BufferedOutputStream的每一次write其实是将内容写入byte[],当buffer容量到达上限时,会触发真正的磁盘写入。
而另一种触发磁盘写入的办法就是调用flush()了。