请教一个问题:
BufferedOutputStream的flush方法是强制将缓冲区中的内容写入到文件中,防止因缓冲区不满而带来的问题。
但是我的程序完成一个文件复制过程,这个文件比默认的缓冲区512字节要小,只有120个字节,即使不调用flush一样可以啊。请各位大侠帮助解释一下
int b = 0;
FileInputStream in = null;
FileOutputStream out = null;
int i = 0;
try {
in = new FileInputStream("d:\\Source.java"); //提醒学生注意:in = new FileInputStream("d:/Source.java"); 也是正确的形式
BufferedInputStream bIn = new BufferedInputStream(in);
out = new FileOutputStream("d:\\Destination.java");
BufferedOutputStream bOut = new BufferedOutputStream(out);
while ((b=bIn.read()) != -1) {
i++;
bOut.write(b);
}
bIn.close();
bOut.close();

System.out.println("============"+i);

} catch (FileNotFoundException e) {
System.out.println("找不到指定文件!");
System.exit(-1);
} catch(IOException e){
System.out.println("文件复制错误!");
System.exit(-1);
}

System.out.println("文件已复制");

解决方案 »

  1.   

    1.close()时会自动flush
    2.在不调用close()的情况下,缓冲区不满,又需要把缓冲区的内容写入到文件或通过网络发送到别的机器时,才需要调用flush
      

  2.   


    BufferedOutputStream,打个比方就像是一个桶,把程序输出的数据存满这个桶后,然后再倒出给要使用的地方而flush() 该方法就是起到了 ,把桶中的信息倒出来的作用
      

  3.   


    从red的看法看来,是不是可以这么理解,只要不忘记关闭流,一般情况下可以不用flush,因为一般缓冲区都是填满后送出数据,到最后一段字节的时候即使不flush也可以通过关闭流送出缓冲区的数据,这样理解可以吗?