黑马程序员技术交流社区
标题:
io中关于读数组方法的问题
[打印本页]
作者:
罗广伟
时间:
2013-7-17 15:13
标题:
io中关于读数组方法的问题
本帖最后由 罗广伟 于 2013-7-18 09:50 编辑
<div class="blockcode"><blockquote>FileInputStream fis=new FileInputStream("g:\\program\\1.txt");
byte[] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1)
{
System.out.println(len);
}
System.out.println(len);
复制代码
问题是读字符数组这个方法是如何工作的。如果文件中有2个字节的数据,那么肯定是读到结束标记才知道有两个字节,那是不是读到结束标记后先把前面数据的字节数返回,再读一次结束标记再返回-1呢?
作者:
白_蓝(八公)
时间:
2013-7-17 21:12
其实抛开你的问题回归本质的话~其实就是fis.read(buf))在读取内容的时候,角标是读一次往后移动一次,当移动到流的末尾的时候,也就是有值的最后一位的时候返回的还不是-1,这个时候是会进行sop输出的!当while再次循环的时候,在判断的()里面,fis.read(buf))!=-1,成立了,直接跳出了循环!!现在回到你说的字符数组~你的程序中的len值应该是byte类型的,是数字,如果要变成字符,要(char)强制转换一下的说~而且我们读取字符,一般情况都会使用字符流的方法读取!而对于文字,总不可能让我读取半个字就返回吧,所以肯定是要把整个字节读完才进行返回的!所以应该是读完返回~然后再判断,返回-1
作者:
冒烟的芒果
时间:
2013-7-17 21:48
read()方法和readLine()方法不同,
readLine()方法读到回车符的时候结束,
read()方法是没有结束符的,如果非要说有,那就是null;结束有两种:一种是读完了,另一种是读buf.length个字节;
每次读完之后返回读取长度 int类型的值;如果没有内容,也就是null,返回 -1;
你可以试着把字节数组 buf 弄小一点;看看每次读取过程;
如果想看看读完之后有没有再去读一次的话,可以把循环部分作下修改
while(true)
{
len = fis.read(buf);
if(len==-1)
{
System.out.println("读完之后再读了一次!");
break;
}
System.out.println(len);
}
复制代码
作者:
crazy_primitive
时间:
2013-7-18 02:04
fis.read(buf)会一直往buf数组里面存储读到的字节数据,当读到结束标记(即len==-1)时它打印第08行的那个输出语句输出存储在字节数组里的数据。当
作者:
crazy_primitive
时间:
2013-7-18 02:07
当 没有读到结束标记时它每读到一个字节的数据就存到字节数组里,然后打印出来,属于一次打印一个字节,而上面的是一次打印数组里的所有数据。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2