while((n=fis.read(b))!=-1)

while((n=fis.read(b))!=-1)

我的理解是,读入b的时候即使它里面实际字节只有100个,但是仍会吧1024个字节都读入进去,然后输出,第二次的时候里面因为没有实际字节,所以n才=-1因为结束循环,不知道我的理解对不对

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,同学给的代码中执行了一次n=fis.read(b);后输出n,程序运行结果为6。如果使用while循环会得到-1。如下:

http://img1.sycdn.imooc.com//climg/5ee34e2709fbf35406250309.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕阿慧 2020-06-12 15:07:09

同学你好,你的理解是正确的。当读到100有数据时,会继续往下读。当读到101的时候发现没有数据,没有数据就返回-1,这时n为-1,由于n!=-1条件不成立,所以while循环结束。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕UI2433440 #1
    FileInputStream fis=new FileInputStream("imooc.txt"); byte b[]=new byte[100]; int n=0; n=fis.read(b); System.out.println(n); .txt文件里面是qweqwe 到第6个数据的时候,发现有数据,n=6,到第七个位置发现没数据n=-1,那么这个n=6不就被n=-1给覆盖了吗,那怎么还会输出6呢
    2020-06-12 15:22:55
  • 好帮手慕阿慧 回复 提问者 慕UI2433440 #2
    同学你好, 1、fis.read(byte []b)方法返回:读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回-1。 2、imooc.txt文件中有6个字节:qweqwe fis.read(b)方法返回读入缓冲区的字节总数。由于读入了qweqwe,字节数为6,所以n的值为6。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-06-12 15:34:04
  • 提问者 慕UI2433440 回复 好帮手慕阿慧 #3
    我想知道的是为啥n=6没有被n=-1所覆盖呢,
    2020-06-12 17:34:43
苍星乱舞 2020-06-12 14:22:31

没了还读啥?

一直读那不是返回值只有   1024  和  -1 了

有几个就读几个 并返回读了几个

  • 提问者 慕UI2433440 #1
    我不能理解的是,比如我上面这个,读到100有数据,但是他肯定不知道101有没有数据,所以继续往下读,读到101的时候发现没有数据,没有数据就返回-1,那么-1不就吧100给覆盖掉了吗,还是说他读到101的时候发现没有数据,n保持100不变,执行循环,下一次n自动赋值为-1结束循环
    2020-06-12 14:43:07
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师