charsandrew
2016-07-19 09:40
我查了下api中这里read的返回值为:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
那么如果我有一个数组一次性读不完的文件,比如需要两次读完,那么第一次读完后bytes返回值为1024,然后再while()循环里面打印输出。第二次读完了,并且返回了-1,此时虽然文件读入了数组,但是bytes=-1,不满足循环条件,循环里面就没执行,就没有打印输出啊!
是这样的吗?还是我理解错了,希望我有把疑惑说清楚。。。
不知道。。。
厉害~~~
然后我写代码去试验了一下,结果是全部都能输出到控制台。然后我就去看read()的源代码了,发现api中的解释有点误导人。实际情况是,在读第二次的476个字节时,如果读到文件结束,下一个字节为空,会先返回476,然后再次读取,这次直接返回-1。
看下read()的源代码就很清楚了,源码其实写的很简单。
哈哈,这个问题还是我自己来解答吧。
我之前的疑问是:比如我要读取一个1500字节的文件,并把它输出到控制台,我定义一个1024字节数组来缓存读取,第一次读1024个字节,返回的是1024;然后将1024字节输出到控制台。然后循环读取,再读剩下的476个字节,因为读完了,返回的是-1,虽然将476个字节读进了数组,但不满足while的执行条件,所以剩下的476个字节是不会输出到控制台的。
文件传输基础——Java IO流
133754 学习 · 1030 问题
相似问题
回答 2
回答 3