JAVA flush()的用法和意义

flush()方法:冲走。意思是把缓冲区的内容强制的写出
    因为操作系统的某些机制,为了防止一直不停地磁盘读写,所以有了延迟写入的概念。
    在网络web服务器上也是,为了防止写一个字节就发送一个消息,所以有缓冲区的概念,比如64K的内存区域,缓冲区写满了再一次性写入磁盘之中(或者发送给客户端浏览器)。
    flush方法一般是程序写入完成时执行。随后跟着close方法
==========================================================================================
问题:

import java.io.*;

public class TestBufferStream2 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("e:\\javapro\\java\\dat2.txt"));
BufferedReader br = new BufferedReader(
new FileReader("e:\\javapro\\java\\dat2.txt"));
String s = null;
for(int i=1;i<=10;i++){
s = String.valueOf(Math.random());
bw.write(s);
bw.newLine();

}
bw.flush();
while((s=br.readLine())!=null){
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) { e.printStackTrace();}
}
}
把 bw.flush(); 这句去掉后,该程序仍然能生成dat2.txt文件,文件中也有数据,为什么该文件内容输出不出来呢?

2012-05-08 14:27 提问者采纳

“将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。”这是BufferedWriter
api的前两句话,意思是:为了防止多次操作IO(操作IO很费cpu时间),提供了一个缓冲区,当缓冲区满的时候,再写入文件,从而提高效率。因此,如果缓冲区没有写满,那么就必须强制他输出到文件,即调用flush();
你问题是:内容只是写到了缓冲区里,并没有写入文件。所以读取不到内容,程序结束后为什么文件里面又有内容呢?因为你在后面调用close()方法了,这个方法调用之前会自动调用flush()。如果你把bw.close(); 也去掉,那么文件里是没有内容的
 
    
 
   
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值