SeamusDR
2018-07-21 18:00
while((bytes = in.read(buf,0,buf.length))!=-1)
搞不明白,假如文件100字节,数组buf容量80字节,第一次读完的时候bytes等于80,然后执行完后边的代码,程序如何回到while循坏呢?
不是已经这样了吗 bytes=80!=-1,不应该是一个死循环吗?有些理解不了这个
而且就算我现在当做能明白这个循环为什么能进行了,可buf数组在第一次循环的时候已经被填满了呀,第二次去循环的时候,是把剩下的20字节覆盖进去吗?而且in.read(buf,0,buf.length))这里第二个参数是“0”,也没有看出来任何地方对这个参数有修改,程序怎么知道应该是从81位开始读呢?
读入缓冲区的总字节数,如果没有更多的数据,因为文件的结尾已经到达, -1
。
刚查了下API文档,一楼的回复太给力了,让我也懂了
/** * Reads a byte of data from this input stream. This method blocks * if no input is yet available. * * @return the next byte of data, or <code>-1</code> if the end of the * file is reached. * @exception IOException if an I/O error occurs. */ public int read() throws IOException { return read0(); }
read()方法返回的是下一个字节
in.read(buf,0,buf.length),这个方法返回的是它读取到的字节个数!
正如你假设的,文件100字节,buf容量80字节:
第一次读取的时候是返回80;
第二次进入while的时候,文件读取的字节是从第81个字节开始(读取的时候文件有个指针一边读一边移动的,前面老师讲过),就是说文件还剩下20个字节可读,所以这时候返回的字节是20;
第三次进入while的时候,文件已经没有内容可读了,所以返回的是-1;
这时候就跳出了while!
纯手打!望采纳!
文件传输基础——Java IO流
133754 学习 · 1030 问题
相似问题