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

(b=in.read(buf,o,buf.length))!=-1 b返回的不是字节个数吗 怎么可能等于-1呢

(b=in.read(buf,o,buf.length))!=-1 b返回的不是字节个数吗 怎么可能等于-1呢

正在回答

4 回答

不知道你有没有看read这个方法的API, 关于这个方法的返回是这样描述的

the total number of bytes read into the buffer, or -1 if there is no more data because the end of the file has been reached.

就是说这个方法是返回一共能读取的字节个数,如果已经读完的话会返回-1 这个值,不过为什么要返回-1, 是人家自己设计的,如果感兴趣可以去看源码。希望能帮到你

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

读完确实是-1,读满返回的就是读取字节的长度,当然现在等于数组的长度,然后进入循环,接着,再次执行while判断,从新读取,再次给数组赋值,直到读取完毕,返回-1.

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

read这个方法是如果流中的内容读取完或者是自定义的字节缓冲区buf被使用满了,会在后面跟着返回一个-1值,以让程序继续下去。

一般都是:

Byte[] buf = new Byte[1024*1024]; //自定义的字节缓冲区

int len = 0; 

while((len= fis.read(buf)) != -1){ //返回的是数组中的个数,如读完或读满,则返回-1

    fos.write(buf);

}

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

bryan4it

如果读满是-1,那应该进入不了循环啊
2016-01-31 回复 有任何疑惑可以回复我~

这是从buf这个对象中的0到buf的长度一个个读取u,当读完了 之后显示-1是结束的意思!

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

举报

0/150
提交
取消

(b=in.read(buf,o,buf.length))!=-1 b返回的不是字节个数吗 怎么可能等于-1呢

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