为什么这段代码里面会产生循环?为什么 b和i的值会变化?

来源:4-1 字节流之文件输入流FileInputStream-1

慕粉4241372

2017-03-06 15:37

FileInputStream in =new FileInputStream(fileName);
        int b=in.read();
	int i=1;
	while((b=in.read())!=-1){
	System.out.print(Integer.toHexString(b)+"  ");
		if(i++%10==0){
			System.out.println();
		}
	}

每次in.read()都会自动往后挪一个字节?

这个if条件里面,无论是否满足都会执行i++吗?

写回答 关注

3回答

  • 涅米
    2017-03-22 11:37:22
    已采纳

    while后面的(b=in.read())!=-1返回的是一个布尔值,而这个值只有在文件读到结尾的时候才返回false,即in.read==-1,所以在读完之前返回的都是true,都可以执行循环

    b的值本身不会变化,但是文件的指针pointer在每次循环后都会加1,所以每次b读出来的值都是不一样的

    if的判断条件是i++%10==0,先判断i%10的值是否为0,然后自增1,此时i=i+1,然后进入下一个循环,判断i+1的值除以10余数是否为0,所以就算if的条件不满足,i也执行了自增

    慕粉1052...

    运算优先级应该是++在前,%在后吧。

    2017-06-23 10:35:48

    共 1 条回复 >

  • Jenichan
    2017-03-07 17:02:21

    结束循坏的条件是in.read()==-1,因为读到-1就表示结束了

  • 张生工作室
    2017-03-06 17:23:26

    in.read() 会后移的, 条件不满足是不是i++的

    慕粉4241...

    最后一句没懂。从程序执行结果来说,就算if里面的判断条件不满足,i也会执行++吧,要不然这个i的值就不会变化了

    2017-03-07 09:06:01

    共 1 条回复 >

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题