黑马程序员技术交流社区

标题: 打印的结果为什么不一样 [打印本页]

作者: 陈少文    时间: 2012-6-21 16:04
标题: 打印的结果为什么不一样
在做字符流读 取时

import java.io.*;
public class CharStream
{
      public static void main(String[] args) throws IOException
      {
             FileReader fr = new FileReader("c://demo.txt");

              //读取的字符数,如果已到达流的末尾,则返回 -1
              while(true)
             {
               //用这样的方式输出有误
                sop(fr.read());
                 if(fr.read()== -1)
                  break;
  
              //用这样的方式输出正确
                /*
                int ch = fr.read();
                if(ch==-1)
                break;
                sop(ch);
                */
             }
        }
     public static void sop(Object o)
     {
              System.out.println(o);
        }
}

自我感觉,这两个判断语句要表达的意思一样,为什么得到的结果会不同呢?

作者: 车风波    时间: 2012-6-21 16:18
哥们
sop(fr.read());
if(fr.read()== -1)
break;
你这样写是read()了两次,假如sop()输出了读到的第一个字节,if()里独到的就是第二个字节。
你看那个正确的代码只有一个read()。这样写才对。
作者: 邓杰    时间: 2012-6-21 16:20
是不是第一个的打打印去的没有第二个打印的多啊;
这是因为read()它返回的是下的个字符;而每调用一次就下次调用的时候就会第二个字节开始读了;sop(fr.read())这里调用一次;返回了第一个字节;而你的if(fr.read()!==1)又调用了一次。这里返回了第二个字节;这次你没有打印;等到你第二次循环的时候;sop(fr.read())返回的就已经是第三个字节了;所以你的第一种方法的打印结果应该是第1 3 5....个字节;
作者: 陈少文    时间: 2012-6-21 18:12
谢谢哥们
作者: 游洪波    时间: 2012-6-23 20:05
sop(fr.read());
这句话就是读取一行然后让sop方法进行输出,那你干嘛还要在下边多写一个
  if(fr.read()== -1)
你这不是又让程序读取了一行了吗?这样一来那你sop输出的东西肯定不对了。输出的肯定是一行隔一行的。




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