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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余海龙 黑马帝   /  2012-2-8 22:18  /  3925 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 余海龙 于 2012-2-9 22:46 编辑

BufferedReader br = new BufferedReader(new FileReader("test1.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("test2.txt"));
String line = null;
while((line=bufr.readLine())!=null){
        if("over".equals(line))
              break;
       bw.write(line.toUpperCase());
       bw.newLine();
       bw.flush();      
}

刷新语句bw.flush(); 放在while循环中,是读一句写一句,这样写好吗? 把刷新语句放在while循环外面呢?
请大家写一下你们的理解,谢谢!

4 个回复

倒序浏览
我觉得flush()定义在循环中会提高效率,不会占用太多的资源。如果让循环执行完之后再flush(),太占用资源了,造成系统不稳定。
flush方法即使在缓冲区中没有满的情况下,也会将缓冲区内的内容强制写到外设,也就是所谓的刷新。flush方法不是对所有的OutputStream子类起作用,只对那些使用缓冲区的OutputStream子类有效。。。。
调用close方法,系统在关闭这个流前,也会将缓冲区的内容写到外设上。。。。
所以在程序中要注意对flush的调用,不然可能碰到奇怪的问题。。。
回复 使用道具 举报
BufferedWriter 意思是把读到的字符放入字符缓冲区里,然后写到文件里。newline它的作用是在流中插入一个换行符。
直接调用这个实例的newLine()方法,那么这个流当前位置就加了个换行。它是BufferedWriter里的特有方法。
bw.flush(); 刷新该流的缓冲。可以放在方法里,也可以放在方法外,个人建议放在方法里。因为如果你放到方法外的话,
代表全都写完了再刷新。而写在方法里代表每写一行就刷新一次,这样可以提高写的效率。
回复 使用道具 举报
今天刚遇到这问题、我写一个字节流copy文件、因为flush写循环里面,copy一个200多M的文件足足用了几分钟。而把flush写循环只用了不到一分钟。因为flush每次循环都会调用去刷新字节流、所以效率就不高(对大文件而言)。
回复 使用道具 举报
首先,flush()方法放在循环内和循环外都能够实现读写功能,但是个人感觉
放在内部好一点,因为如果程序中断的话,边读边写可以保证数据流失的不是
太大。使用BufferedWriter进行写的时候,flush()方法的作用是清除缓冲区的
数据,把它写入到指定文件中,如果不用flush()的话,只有等到缓冲区内存满的
时候才会写入到指定文件中去,以释放缓冲区内存。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马