while (bytes = in.read(buf,0,buf.length))!=-1) 这个是什么机制的循环 我怎么没看懂 而且bytes的数目还能等于-1 要是能等于-1的话 那第一种代码 不就是错的么
我感觉楼上说的有问题,int bs = read(buf,0,buf.length)运行的时候会返回读入缓冲区的字节总数,但是(注意),如果已经到了文件末尾则返回-1,意思就是说,举个楼上一样的例子,我有个1024字节大小的字节数组,要读取一个1500字节大小的数据,首先第一次bs的值等于1024,不等于-1,进入循环打印输出,第二次bs的值等于476,不等于-1,进入循环打印输出,第三次bs的值等于-1,跳出循环,最终是可以打印输出1500数据的全部内容的,在这过程中可以发现有个类似指针的作用,read方法它会一个一个字节轮流读取数据(这是我的理解,仅供参考,如果有理解的错误的地方,也请大神们帮忙指出哈)
看了楼主的自问自答,搞懂了。
还在吗?
我明白了,但是是通过自己写代码试验+看read()方法的原代码,明白的。我上面说的情况确实不会发生。
如果你有兴趣,我讲给你一下。
如果你的bytes是定义的数组的话,这段代码就是错误的。in.read()方法是有返回值的,返回值就是你读取了多少个字节。最多可以读取你定义的buf数组大小的字节,如果没有读完会自动再往下读取buf大小的字节。但是如果读到一半读完了,相当于你的buf数组其实是没有放满的,那你知道实际读取了多少字节吗?所有才有了返回值就是bytes这个值,如果最后这个值读出来=-1不就是读完了吗??