对BufferedOutputStream的flush方法的疑惑

dqpilzg 2010-08-10 04:30:03
请教一个问题:
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("文件已复制");
...全文
669 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dqpilzg 2010-08-12
  • 打赏
  • 举报
回复
感谢各位,问题清楚了,结贴散分
jason69181 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dqpilzg 的回复:]

那请问什么时候该加呢
[/Quote]

BufferedOutputStream,打个比方就像是一个桶,把程序输出的数据存满这个桶后,然后再倒出给要使用的地方

而flush() 该方法就是起到了 ,把桶中的信息倒出来的作用
「已注销」 2010-08-11
  • 打赏
  • 举报
回复
1.close()时会自动flush
2.在不调用close()的情况下,缓冲区不满,又需要把缓冲区的内容写入到文件或通过网络发送到别的机器时,才需要调用flush
dqpilzg 2010-08-11
  • 打赏
  • 举报
回复
那请问什么时候该加呢
yuaa88 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 redduke1202 的回复:]

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

从red的看法看来,是不是可以这么理解,只要不忘记关闭流,一般情况下可以不用flush,因为一般缓冲区都是填满后送出数据,到最后一段字节的时候即使不flush也可以通过关闭流送出缓冲区的数据,这样理解可以吗?
mf0606 2010-08-11
  • 打赏
  • 举报
回复
一般情况下还是加上比较好。
caofeng891102 2010-08-10
  • 打赏
  • 举报
回复
你这个是特殊情况。。加不加一样的。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧