黑马程序员技术交流社区

标题: 写入转换流,错一行代码,变成奇葩...求解释`~~ [打印本页]

作者: wahaha    时间: 2013-3-13 00:45
标题: 写入转换流,错一行代码,变成奇葩...求解释`~~
本帖最后由 夏添 于 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();
        
                }
        
        }
        


作者: 李阳    时间: 2013-3-13 01:20
while((line = bufr.readLine())!=null)
                {
                  if (line.equals("over"))
                        break;
                  osw.write(line.toUpperCase());
                                 // bufw.write(line.toUpperCase());
                   bufw.newLine();
                   osw.flush();//这里是错误的地方。你源代码使用的是osw流,但是没对它刷新,也没有关闭它,肯定不会有显示了。楼组大意了。
作者: wahaha    时间: 2013-3-13 07:28
李阳 发表于 2013-3-13 01:20
while((line = bufr.readLine())!=null)
                {
                  if (line.equals("over"))

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2