为了账号安全,请及时绑定邮箱和手机立即绑定

老师这里创建字节数组循环读取大文件是不是有bug呢?

http://img1.sycdn.imooc.com//578d838c0001c01212800720.jpg


我查了下api中这里read的返回值为:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。

那么如果我有一个数组一次性读不完的文件,比如需要两次读完,那么第一次读完后bytes返回值为1024,然后再while()循环里面打印输出。第二次读完了,并且返回了-1,此时虽然文件读入了数组,但是bytes=-1,不满足循环条件,循环里面就没执行,就没有打印输出啊!

  是这样的吗?还是我理解错了,希望我有把疑惑说清楚。。。

正在回答

4 回答

不知道。。。

0 回复 有任何疑惑可以回复我~
#1

charsandrew 提问者

我弄明白了,具体看我在楼下的回复。。。
2016-07-19 回复 有任何疑惑可以回复我~

厉害~~~

0 回复 有任何疑惑可以回复我~

然后我写代码去试验了一下,结果是全部都能输出到控制台。然后我就去看read()的源代码了,发现api中的解释有点误导人。实际情况是,在读第二次的476个字节时,如果读到文件结束,下一个字节为空,会先返回476,然后再次读取,这次直接返回-1。

看下read()的源代码就很清楚了,源码其实写的很简单。

0 回复 有任何疑惑可以回复我~

哈哈,这个问题还是我自己来解答吧。

我之前的疑问是:比如我要读取一个1500字节的文件,并把它输出到控制台,我定义一个1024字节数组来缓存读取,第一次读1024个字节,返回的是1024;然后将1024字节输出到控制台。然后循环读取,再读剩下的476个字节,因为读完了,返回的是-1,虽然将476个字节读进了数组,但不满足while的执行条件,所以剩下的476个字节是不会输出到控制台的。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师这里创建字节数组循环读取大文件是不是有bug呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信