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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清心玉质 中级黑马   /  2013-8-9 18:21  /  1797 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 清心玉质 于 2013-8-11 11:30 编辑

BufferedWriter中的close方法不是有刷新的作用吗?为什么我在下面的代码中用close不能输出,只能用flush才能看到结果呢?
import java.io.*;
class TransStreamDemo
{
public static void main(String[] args) throws IOException
{
  BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
  String line = null;
  while ((line=bufr.readLine())!=null)
  {
   if("over".equals(line))
    break;
   bufw.write(line.toUpperCase());
   bufw.newLine();
   bufw.flush();//只有用这个才能看到结果
   }
  bufr.close();
bufw.close();//不能刷新
}
}

5 个回复

倒序浏览
在你的循环体中如果不加上flush的话,就意味着不停的读数据,而循环体外面的close是读不到的,所以你写一个数据暂时是看不见的,只有当你输入over才能一次性看到
回复 使用道具 举报
本帖最后由 胡智 于 2013-8-9 19:38 编辑

close方法是可以刷新的。楼主想要的是输入一行字符,回车以后会在屏幕上显示这一行的字符的大写形式。
  1. while ((line=bufr.readLine())!=null)
  2.   {
  3.    if("over".equals(line))
  4.     break;
  5.    bufw.write(line.toUpperCase());
  6.    bufw.newLine();
  7. //bufw.flush();//只有用这个才能看到结果
  8.    }
复制代码
循环里面的效果是,你输入一行,转换后的内容存在缓存区里面。不刷新的话,不会打印到屏幕上。你再输入一行,再存于缓存里。直到你输入over结束循环,用close()关闭流。一刷新,之前存与缓存的内容都显示出来了。
  1. import java.io.*;
  2. class TransStreamDemo
  3. {
  4. public static void main(String[] args) throws IOException
  5. {
  6.   BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  7.   BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
  8.   String line = null;
  9.   while ((line=bufr.readLine())!=null)
  10.   {
  11.    if("over".equals(line))
  12.     break;
  13.    bufw.write(line.toUpperCase());
  14.    bufw.newLine();
  15.    //bufw.flush();//只有用这个才能看到结果
  16.    }
  17.          bufr.close();
  18.         bufw.close();//不能刷新
  19. }
  20. }
复制代码
所以你想输入一行就显示一行,就要在写入数据后刷新一下。

QQ图片20130809193524.jpg (8.24 KB, 下载次数: 11)

不刷新的结果

不刷新的结果

qa.png (1.46 KB, 下载次数: 17)

刷新后的结果

刷新后的结果

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
会飞的狼 发表于 2013-8-9 18:35
在你的循环体中如果不加上flush的话,就意味着不停的读数据,而循环体外面的close是读不到的,所以你写一个 ...

不是先写到缓存区中吗?close刷新关闭缓存区
回复 使用道具 举报
清心玉质 发表于 2013-8-9 19:36
不是先写到缓存区中吗?close刷新关闭缓存区

你输入一个个字符串后按了回车键,并没有跳出循环啊,它要继续下一次循环,下次循环还是要你写数据,执行不到close,你按个ctrl+c就能全部输出了
回复 使用道具 举报
谢谢大家了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马