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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡文彬 中级黑马   /  2014-3-11 23:02  /  1074 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void read3() throws IOException{

                File f=new File("c:\\a2.txt");
                FileInputStream fr=new FileInputStream(f);
       
                byte[]buf=new byte[8];
                int len;
              while((len=fr.read(buf))!=-1)
              {
               
                         for(int i=0;i<len;i++)
                              System.out.print((char)buf[i]);
              }
               
                fr.close();
        }
设c2文件中的数据全为字母:
   womendeheima
奇怪的是:
len=fr.read(buf);
中的read()方法当到达流末尾是-1时,则返回-1
第一次:读出womendeh   成功
第二次:只剩下eima,  此时读到最后的a后,已到达末尾了,len=-1,照理说,现在应该退出循环了,为什么还能读出能,而且len=4.
望高人解析,
  

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

3 个回复

倒序浏览
  1. File f=new File("D:\\a\\a2.txt");
  2.         FileInputStream fr=new FileInputStream(f);

  3.         byte[]buf=new byte[8];
  4.         int len;
  5.         while((len=fr.read(buf))!=-1)
  6.         {
  7.               //打印读到的字节个数
  8.               System.out.println(len);
  9.               for(int i=0;i<len;i++)
  10.                       System.out.print((char)buf[i]);
  11.               //换行
  12.           System.out.println();
  13.         }
  14.       //打印读到的字节个数
  15.         System.out.println(len);
  16.         fr.close();
复制代码
你按照上面的程序,你走一遍,
read(buf)这个方法,返回的是读到的字节的个数,不一定非要读满8个字节,读4个字节就返回4,最后一次到达文件末尾,一个也没有读到,就返回-1

jdk上面写的是:从此输入流中将最多 b.length字节的数据读入一个 byte 数组中。

评分

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

查看全部评分

回复 使用道具 举报
实际上read(byte[] b)里面调用的还是一个一个字节读取的read()方法。只是将读出的字节装在byte[] b中。
第一次:读取等于 buf 的长度的字节,读出womendeh,返回值为8,条件为真,执行while里的语句。
第二次:一个一个读取字节,读到文件尾,不再读取字节,将这些字节存储在 buf[0] 到 buf[2] 的元素中,不影响 buf[3] 到 buf[7] 的元素。同时返回实际读取的字节数3,条件为真,执行while里的语句。
第三次:读取文件尾,返回-1,条件为假。不再执行while语句。

评分

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

查看全部评分

回复 使用道具 举报
fr.read(buf)将读到的字节数组放到buf 中,读到几个字节buf的长度就是多少。只有当一个字节读不到才返回-1

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马