问答详情
源自:4-2 字节流之文件输入流FileInputStream-2

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

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


提问者:积跬步致千里 2016-07-18 15:58

个回答

  • 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方法它会一个一个字节轮流读取数据(这是我的理解,仅供参考,如果有理解的错误的地方,也请大神们帮忙指出哈)

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

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

  • 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不就是读完了吗??