为了账号安全,请及时绑定邮箱和手机立即绑定

请问一个关于视频中while的问题

int bytes = 0;
        int j = 1;

while((bytes = in.read(buf,0,buf.length)) != -1){
            for(int i = 0 ; i < bytes ; i++){
                System.out.print(Integer.toHexString(buf[i] & 0xff) + "  ");
                if(j++%10 == 0){
                    System.out.println();
                }
            }
        }

这个返回的bytes,在读取的文件确定的时候,应该是个固定的值吧?

那么视频中的循环为什么不会发生死循环?

正在回答

1 回答

不是固定的值,如果有数据,就是读取的字节数,如果没数据,就是-1


1 回复 有任何疑惑可以回复我~
#1

a4500 提问者

读取的字节数应该就是buf.length或者是文件字节数吧, 比如文件有imooc五个字节,返回的bytes应该为5,那么while循环如何停止?
2015-04-07 回复 有任何疑惑可以回复我~
#2

好帮手慕珊 回复 a4500 提问者

bytes是实际读取到的字节数,如果没有读到数据bytes就为-1,循环就停止了
2015-04-07 回复 有任何疑惑可以回复我~
#3

a4500 提问者 回复 好帮手慕珊

这个我知道,不过bytes = in.read(buf,0,buf.length) 这段话是怎么执行的呢?如果一个imooc.txt中只有imooc五个字符, bytes=5才对,那么while(5 != -1)循环不就没办法停止了吗?
2015-04-07 回复 有任何疑惑可以回复我~
#4

a4500 提问者 回复 好帮手慕珊

刚刚又想了想,是不是一次能读完的话,就是先返回一个int,到下一次循环的时候再返回-1, 如果buf[]数组容量不足,那么就多次循环,直到读完整个文件,读完之后再返回-1
2015-04-07 回复 有任何疑惑可以回复我~
#5

langren1992 回复 a4500 提问者

下一次读取时,就到了文件末尾,于是bytes=-1,循环结束
2015-08-10 回复 有任何疑惑可以回复我~
#6

慕粉3727206

每次循环byte的值会和之前的值相加吗?
2016-09-01 回复 有任何疑惑可以回复我~
查看3条回复

举报

0/150
提交
取消

请问一个关于视频中while的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信