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

while循环是不是存在问题的

最后这个while循环不会一直在那从0开始read循环吗  因为bytes不等于-1啊 是不是有问题

正在回答

4 回答

read(buf,0,b)是把读到的数据存到buf这个数组里面去,从0到b!返回值是读的字节数!

0 回复 有任何疑惑可以回复我~

read()返回的是放入数组buf的大小,前面定义buf大小为8*1024,单位字节,假设一个文件大小为13192字节,读三次才能读完,第一次读8192字节,bytes=8192,然后打印出来,第二次,in.read(buf,0,buf.length)=5000,然后前面byte数组中前5000个字节被覆盖,然后for循环把这5000个字节打印出来,第三次没东西读了,返回-1,结束循环。而这时候buf的大小还是8192,第二次只是覆盖了前面的,AIP也解释的很不清楚:这些字节将存储在 b[off] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1] 的元素

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

TiGer196

bytes第一次 =8192,第二次 =5000,第三次 =-1
2017-02-08 回复 有任何疑惑可以回复我~
#2

java_jun 提问者 回复 TiGer196

嗯呐 谢谢了哈 原来是覆盖了啊
2017-02-08 回复 有任何疑惑可以回复我~
#3

KingAmo 回复 TiGer196

第二次就应该读到文件结尾了啊,为什么还要读第三次?我以为第二次bytes就会是-1。。能解释一下吗,谢谢
2017-06-21 回复 有任何疑惑可以回复我~
#4

TiGer196 回复 KingAmo

1b都没有了才是-1,第二次还有数据啊
2017-06-21 回复 有任何疑惑可以回复我~
查看1条回复

。。但是while里面每次都是写的从0开始的

while((bytes = in.read(buf,0,buf.length)) != -1)

还有个问题 一次就读取满了buf这个数组,下次再读进去不是放不进去了吗  大神讲解下

0 回复 有任何疑惑可以回复我~

while没错  对象.read(byte[] b, int off, int len);//方法是这样的:从对象中读取len个字节放进b中,每次从b中off位置开始放,.但是老师对于这块有一个问题没讲清,我的理解是:文件指针从0开始读取,每次读取,指针后移一次,读取完一组字节,此时指针已经移动到了下一个未读取的位置,下次while循环时,从指针的位置继续读取,往放入b中  从b的off位置又开始放,知道放满,每次循环。当read方法读取到结尾时,返回值为-1,bytes接受该返回值,作为循环结束条件。(可能有错误的地方,同求大神指明)

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

java_jun 提问者

。。但是while里面每次都是写的从0开始的 while((bytes = in.read(buf,0,buf.length)) != -1) 还有个问题 一次就读取满了buf这个数组,下次再读进去不是放不进去了吗 大神讲解下
2017-02-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

while循环是不是存在问题的

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