黑马程序员技术交流社区
标题:
一直以来的疑问
[打印本页]
作者:
胡文彬
时间:
2014-3-11 23:02
标题:
一直以来的疑问
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.
望高人解析,
作者:
yunzhongzhuhuo
时间:
2014-3-12 00:31
File f=new File("D:\\a\\a2.txt");
FileInputStream fr=new FileInputStream(f);
byte[]buf=new byte[8];
int len;
while((len=fr.read(buf))!=-1)
{
//打印读到的字节个数
System.out.println(len);
for(int i=0;i<len;i++)
System.out.print((char)buf[i]);
//换行
System.out.println();
}
//打印读到的字节个数
System.out.println(len);
fr.close();
复制代码
你按照上面的程序,你走一遍,
read(buf)这个方法,返回的是读到的字节的个数,不一定非要读满8个字节,读4个字节就返回4,最后一次到达文件末尾,一个也没有读到,就返回-1
jdk上面写的是:从此输入流中将
最多
b.length
个
字节的数据读入一个 byte 数组中。
作者:
twtzhongxin
时间:
2014-3-12 00:46
实际上read(byte[] b)里面调用的还是一个一个字节读取的read()方法。只是将读出的字节装在byte[] b中。
第一次:读取等于 buf 的长度的字节,读出womendeh,返回值为8,条件为真,执行while里的语句。
第二次:一个一个读取字节,读到文件尾,不再读取字节,将这些字节存储在 buf[0] 到 buf[2] 的元素中,不影响 buf[3] 到 buf[7] 的元素。同时返回实际读取的字节数3,条件为真,执行while里的语句。
第三次:读取文件尾,返回-1,条件为假。不再执行while语句。
作者:
一年_Hei
时间:
2014-3-12 10:57
fr.read(buf)将读到的字节数组放到buf 中,读到几个字节buf的长度就是多少。只有当一个字节读不到才返回-1
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2