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

read返回值问题

...

int bytes = in.read(buf, 0, buf.length); 

int j = 1;

for(int i = 0; i < bytes; i++){  //文件字节数小于buf容量应该返回-1,那为什么循环还可以执行下去啊啊啊啊啊啊啊啊啊 

...

正在回答

5 回答

这个方法如果读到文件末尾才返回-1呢,否则应该返回的是读取的字节数。

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

you_nice 提问者

对的!谢谢解答! 我本来想如果buf.length大于文件大小的话,那么int bytes = in.read(buf, 0, buf,length)读到文件末尾了,byte不是应该等于-1么,i == 0 > bytes == -1, 那for循环应该就不执行了,可是结果for循环还是执行了,而且输出了buf.length个字节。 然后看看源码就懂了,原来是第一次read()的时候读到了文件末尾才返回 -1,后面的read()如果读到了文件末尾的话就还是返回读到的字节数!
2015-07-27 回复 有任何疑惑可以回复我~

请问视频中,定义了int bytes=0;为什么后面还用if(int i=0;i<bytes;i++){}

而且还可以读取出内容来。

谢谢你!

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

you_nice 提问者

你说的是这一段么 int bytes = 0; while((bytes = in.read(buf, 0, buf.length)) != -1){ ​for(int i = 0; i < bytes; i++){ ​} } 中间有一行bytes = in.read(buf, 0, buf.length),bytes的值改变了,变成读到的字节数, 所以for循环执行了
2015-07-30 回复 有任何疑惑可以回复我~
#2

鲜衣 回复 you_nice 提问者

哈哈。看漏了,谢谢你!
2015-07-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

read返回值问题

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