bytes = in.read(buf,0,buf.length))!=-1 什么意思

来源:4-2 字节流之文件输入流FileInputStream-2

积跬步致千里

2016-07-18 15:58

while (bytes = in.read(buf,0,buf.length))!=-1) 这个是什么机制的循环 我怎么没看懂 而且bytes的数目还能等于-1 要是能等于-1的话 那第一种代码 不就是错的么 


写回答 关注

5回答

  • qq_行尸Walker_03594139
    2017-04-07 13:12:19

    我感觉楼上说的有问题,int bs = read(buf,0,buf.length)运行的时候会返回读入缓冲区的字节总数,但是(注意),如果已经到了文件末尾则返回-1,意思就是说,举个楼上一样的例子,我有个1024字节大小的字节数组,要读取一个1500字节大小的数据,首先第一次bs的值等于1024,不等于-1,进入循环打印输出,第二次bs的值等于476,不等于-1,进入循环打印输出,第三次bs的值等于-1,跳出循环,最终是可以打印输出1500数据的全部内容的,在这过程中可以发现有个类似指针的作用,read方法它会一个一个字节轮流读取数据(这是我的理解,仅供参考,如果有理解的错误的地方,也请大神们帮忙指出哈)

    慕瓜7073...

    为什么第二次bs的值会是476,第三次会是-1呢?

    2018-04-11 21:50:51

    共 1 条回复 >

  • 昵称是JaVa
    2017-01-14 09:19:39

    看了楼主的自问自答,搞懂了。

    昵称是JaV...

    搞错了,是 @charsandrew的自问自答。感谢。

    2017-01-14 09:22:00

    共 1 条回复 >

  • XhstormR
    2016-09-13 19:49:15

    还在吗?

  • charsandrew
    2016-07-19 11:11:16

    我明白了,但是是通过自己写代码试验+看read()方法的原代码,明白的。我上面说的情况确实不会发生。

    如果你有兴趣,我讲给你一下。

  • 慕粉慕名而来
    2016-07-18 17:00:57

    如果你的bytes是定义的数组的话,这段代码就是错误的。in.read()方法是有返回值的,返回值就是你读取了多少个字节。最多可以读取你定义的buf数组大小的字节,如果没有读完会自动再往下读取buf大小的字节。但是如果读到一半读完了,相当于你的buf数组其实是没有放满的,那你知道实际读取了多少字节吗?所有才有了返回值就是bytes这个值,如果最后这个值读出来=-1不就是读完了吗??

    慕瓜7073... 回复charsa...

    为什么读完了会返回-1呢

    2018-04-11 21:51:46

    共 7 条回复 >

文件传输基础——Java IO流

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

133754 学习 · 1030 问题

查看课程

相似问题