I/O操作中的flush()函数
在昨天看的一个代码中发现里面用到了flush()函数,对此不是很理解,查阅相关资料,我感觉并没有想象的那么麻烦
package io; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Huanc { public static void main(String[] args) throws IOException { FileInputStream fis; FileOutputStream fos; BufferedInputStream bis; BufferedOutputStream bos; int i; try { fis=new FileInputStream("image/wei1.txt"); bis=new BufferedInputStream(fis); fos=new FileOutputStream("image/wei2.txt"); bos=new BufferedOutputStream(fos); i=bis.read(); while(i!=-1) { bos.write(i); bos.flush(); i=bis.read(); } fis.close(); fos.close(); bis.close(); bos.close(); System.out.println("复制成功"); } catch(IOException e) { System.out.println("没有找到文件"); } } }
上面的代码中用到了flush()函数,当把那句话注释掉就会发现程序运行错误,是为什么呢?
我这样认为缓冲字节流每次读入的可能就是一段话 ,当程序读完之后并不一定写完,因为还有一部分可能会留在缓冲区中。如果此时使用close()函数,可能程序并没有写完,而flush() 是把缓冲区的数据强行输出,所以应该在关闭读写流之前先flush()。