java_jun
2017-02-04 22:28
最后这个while循环不会一直在那从0开始read循环吗 因为bytes不等于-1啊 是不是有问题
read(buf,0,b)是把读到的数据存到buf这个数组里面去,从0到b!返回值是读的字节数!
read()返回的是放入数组buf的大小,前面定义buf大小为8*1024,单位字节,假设一个文件大小为13192字节,读三次才能读完,第一次读8192字节,bytes=8192,然后打印出来,第二次,in.read(buf,0,buf.length)=5000,然后前面byte数组中前5000个字节被覆盖,然后for循环把这5000个字节打印出来,第三次没东西读了,返回-1,结束循环。而这时候buf的大小还是8192,第二次只是覆盖了前面的,AIP也解释的很不清楚:这些字节将存储在 b[off] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1] 的元素
。。但是while里面每次都是写的从0开始的
while((bytes = in.read(buf,0,buf.length)) != -1)
还有个问题 一次就读取满了buf这个数组,下次再读进去不是放不进去了吗 大神讲解下
while没错 对象.read(byte[] b, int off, int len);//方法是这样的:从对象中读取len个字节放进b中,每次从b中off位置开始放,.但是老师对于这块有一个问题没讲清,我的理解是:文件指针从0开始读取,每次读取,指针后移一次,读取完一组字节,此时指针已经移动到了下一个未读取的位置,下次while循环时,从指针的位置继续读取,往放入b中 从b的off位置又开始放,知道放满,每次循环。当read方法读取到结尾时,返回值为-1,bytes接受该返回值,作为循环结束条件。(可能有错误的地方,同求大神指明)
文件传输基础——Java IO流
133754 学习 · 1030 问题
相似问题