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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈少文 中级黑马   /  2012-6-21 16:04  /  1894 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在做字符流读 取时

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);
        }
}

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

4 个回复

倒序浏览
哥们
sop(fr.read());
if(fr.read()== -1)
break;
你这样写是read()了两次,假如sop()输出了读到的第一个字节,if()里独到的就是第二个字节。
你看那个正确的代码只有一个read()。这样写才对。
回复 使用道具 举报
是不是第一个的打打印去的没有第二个打印的多啊;
这是因为read()它返回的是下的个字符;而每调用一次就下次调用的时候就会第二个字节开始读了;sop(fr.read())这里调用一次;返回了第一个字节;而你的if(fr.read()!==1)又调用了一次。这里返回了第二个字节;这次你没有打印;等到你第二次循环的时候;sop(fr.read())返回的就已经是第三个字节了;所以你的第一种方法的打印结果应该是第1 3 5....个字节;
回复 使用道具 举报
谢谢哥们
回复 使用道具 举报
sop(fr.read());
这句话就是读取一行然后让sop方法进行输出,那你干嘛还要在下边多写一个
  if(fr.read()== -1)
你这不是又让程序读取了一行了吗?这样一来那你sop输出的东西肯定不对了。输出的肯定是一行隔一行的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马