A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 地狱天堂 中级黑马   /  2014-8-10 20:09  /  2179 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 地狱天堂 于 2014-8-10 21:07 编辑

为什么bufw.flush(); 加不加效果一样?

  1. <p>import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;</p><p>public class CopyTestByBuf {
  6. /*
  7.   * 通过缓冲区复制一个.java文件。
  8.   *
  9.   *
  10.   */
  11. public static void main(String[] args) {
  12.   BufferedReader bufr = null;
  13.   BufferedWriter bufw = null;
  14.   String lin = null;
  15.   try {
  16.    bufr = new BufferedReader(new FileReader("c:/test44.java"));
  17.    bufw = new BufferedWriter(new FileWriter("d:/demo.java"));
  18.    while ((lin = bufr.readLine()) != null) {
  19.     bufw.write(lin);
  20.     bufw.newLine();
  21.     // bufw.flush();  //这里flush();加不加结果都一样,可以完成复制。为什么?
  22.    }
  23.   } catch (IOException e) {
  24.    System.out.println(e.toString());
  25.   } finally {
  26.    try {
  27.     if (bufw != null)
  28.      bufw.close();
  29.    } catch (IOException e) {
  30.     System.out.println(e.toString());
  31.    }  try {
  32.     if (bufr != null)
  33.      bufr.close();
  34.    } catch (IOException e) {
  35.     System.out.println(e.toString());
  36.    }
  37.   }
  38. }
  39. }

复制代码

10 个回复

倒序浏览
BufferedWriter里读取方法调用了Read方法和刷新方法,写入方法也亦如是,都是一步完成的
回复 使用道具 举报
.close()包含一次.flush();如果复制的文件较小的时候不必要再调用.flush();
回复 使用道具 举报
你下面有.colse()啊,这个带着刷新呢
回复 使用道具 举报
科篮 发表于 2014-8-10 20:22
.close()包含一次.flush();如果复制的文件较小的时候不必要再调用.flush();

close()包含一次.flush()没错。
但是我的文件大概在300行以上,
我往bufw.newLine();后面加2句
System.out.println(lin);
Thread.sleep(1000);
程序运行的时候,也是一行一行刷出来的,还没有执行到close();
回复 使用道具 举报
地狱天堂 发表于 2014-8-10 20:34
close()包含一次.flush()没错。
但是我的文件大概在300行以上,
我往bufw.newLine();后面加2句

Java虚拟机占的缓冲区256M吧?你这300行文件就是sleep(1000)多少字节?自己按住ctrl加左键看源码
回复 使用道具 举报
现在理解了,如果加.flush()就是读一行刷新一次写一行。
如果不加.flush(),那么lin会一直加,最后close();的时候再一次性写入。
回复 使用道具 举报
科篮 发表于 2014-8-10 20:46
Java虚拟机占的缓冲区256M吧?你这300行文件就是sleep(1000)多少字节?自己按住ctrl加左键看源码 ...

我下面写的理解对吗?
回复 使用道具 举报
科篮 中级黑马 2014-8-10 21:02:36
9#
地狱天堂 发表于 2014-8-10 20:56
我下面写的理解对吗?

对的,如果文件太大的话,可以自定义多久刷一次
回复 使用道具 举报
科篮 发表于 2014-8-10 21:02
对的,如果文件太大的话,可以自定义多久刷一次

明白了,谢谢
回复 使用道具 举报
有难度啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马