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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 夏添 于 2013-3-13 08:43 编辑

问题描述在代码的最下面的注释部分,,真心求解释哇!!!查了好些资料...都不能理解...现在头都大了...

public class Test6
{
        public static void main(String[] args) throws IOException
        {

               //建立读取流
                InputStream in = System.in;
                InputStreamReader isr = new InputStreamReader(in);
                BufferedReader bufr = new BufferedReader(isr);
               
                //建立写入流
                OutputStream out = System.out;
                OutputStreamWriter osw = new OutputStreamWriter(out);//定义写入流转换
                BufferedWriter bufw = new BufferedWriter(osw);
               


                String line = null;
                while((line = bufr.readLine())!=null)
                {
                        if (line.equals("over"))
                        break;
                        
                        //  输出到控制台上
                         osw.write(line.toUpperCase());//--->>就是这里,错写成了osw.导致打印结果没有回车,
                                                                                   老毕的视频中讲解是bufwwrite(line.toUpperCase()),用缓冲区来驱动输出,
                                                                                   但问题是,这样写为什么不行呢?结果不都是操作out么??
                         bufw.newLine();
                         bufw.flush();
        
                }
        
        }
        

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
while((line = bufr.readLine())!=null)
                {
                  if (line.equals("over"))
                        break;
                  osw.write(line.toUpperCase());
                                 // bufw.write(line.toUpperCase());
                   bufw.newLine();
                   osw.flush();//这里是错误的地方。你源代码使用的是osw流,但是没对它刷新,也没有关闭它,肯定不会有显示了。楼组大意了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
李阳 发表于 2013-3-13 01:20
while((line = bufr.readLine())!=null)
                {
                  if (line.equals("over"))

我早上起来又试了试,
我代码那样写没问题的
总结:输出的时候,用字节转换流驱动也行,就是说,建立的字符缓冲可以不用,当然了建立字符缓冲对象的作用,可以理解为就为了用那个newLine();
        刷新的时候,刷新字节转换流也行,刷新缓冲液行,我的理解是,无论怎么输出,其实都是在调用底层的字节写出的write方法,最后都是先写到内存的缓冲区,
  
     谢谢!!!求指正批评~~~~
        
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马