放羊的牧马人3760913
2016-12-16 08:57
老师的while((bytes=in.read(buf,0,buf.length))!=-1)这里应该有点问题,这时候read()返回的应该是所读的字节数,是不是设置bytes++<=buf.length
read返回的确实是字节数,但是读到文件尾时就返回-1。
所以如果文件没有被读完,则返回读取长度而不是-1,while继续执行,循环利用buf。
如果文件被读完,则返回-1,while循环结束。
-----------------------------------------------
如果按你说的bytes++<=buf.length,那读到文件尾时返回-1也小于buf.length,那循环还继续做不就错了^_^
read
public int read(byte[] b)
throws IOException
从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻塞。
覆盖:
类 InputStream 中的 read
参数:
b - 存储读取数据的缓冲区。
返回:
读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
InputStream.read(byte[], int, int)
文件传输基础——Java IO流
133754 学习 · 1030 问题
相似问题