您的位置:首页 > 编程语言 > Java开发

JAVA flush()的用法和意义

2015-04-07 14:23 489 查看


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提问者采纳

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



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: