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

来源:4-3 字节流之文件输出流FileOutputStream

Dreamer012

2015-12-21 12:36

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

写回答 关注

4回答

  • IT界小嫩草一枚
    2016-06-14 21:50:41

    不知道你有没有看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, 是人家自己设计的,如果感兴趣可以去看源码。希望能帮到你

  • bryan4it
    2016-01-31 10:47:16

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

  • 倒霉蛋儿
    2016-01-14 16:27:15

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

    一般都是:

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

    int len = 0; 

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

        fos.write(buf);

    }

    bryan4...

    如果读满是-1,那应该进入不了循环啊

    2016-01-31 10:43:07

    共 1 条回复 >

  • 爱谁谁已成年
    2015-12-21 13:08:30

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

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题