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(); 也去掉,那么文件里是没有内容的
相关文章推荐
- 【转载】java&nbsp;for&nbsp;的几种用法
- JAVA&nbsp;Pattern和Matcher&nbsp;的用法
- java 中 instanceof 的意思及用法
- Java web中cookies的用法
- java 中split用法
- Properties&nbsp;java&nbsp;读写文件类用法
- Java Callable用法
- Java timer timertask用法(转)
- jsoup java html 解析器用法
- Java第五课 Java的常用包,"=="和"equals"的用法,基本数据类型与引用类型,对象的克隆。
- java&nbsp;类,方法,变量的说明符&nbsp;&nbsp;&nbsp;pr…
- Ubuntu 10.10下java 的简单安装过…
- Java Thread小结
- think_java第二章&nbsp;一切皆对象(2)
- hdu 2005 第几天? java版
- Java&&Android Socket简单用法
- java&nbsp;中&nbsp;int和byte数组互转
- java&nbsp;学习:在java中实现小数的精…
- java_think&nbsp;第五章&nbsp;初始化和清理
- 关于jstl EL用法的注意点(java.lang.NumberFormatException: For input string: "userName")