為什么這段代碼里面會(huì)產(chǎn)生循環(huán)?為什么 b和i的值會(huì)變化?
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()都會(huì)自動(dòng)往后挪一個(gè)字節(jié)?
這個(gè)if條件里面,無(wú)論是否滿(mǎn)足都會(huì)執(zhí)行i++嗎?
2017-03-22
while后面的(b=in.read())!=-1返回的是一個(gè)布爾值,而這個(gè)值只有在文件讀到結(jié)尾的時(shí)候才返回false,即in.read==-1,所以在讀完之前返回的都是true,都可以執(zhí)行循環(huán)
b的值本身不會(huì)變化,但是文件的指針pointer在每次循環(huán)后都會(huì)加1,所以每次b讀出來(lái)的值都是不一樣的
if的判斷條件是i++%10==0,先判斷i%10的值是否為0,然后自增1,此時(shí)i=i+1,然后進(jìn)入下一個(gè)循環(huán),判斷i+1的值除以10余數(shù)是否為0,所以就算if的條件不滿(mǎn)足,i也執(zhí)行了自增
2017-03-07
結(jié)束循壞的條件是in.read()==-1,因?yàn)樽x到-1就表示結(jié)束了
2017-03-06
in.read() 會(huì)后移的, 條件不滿(mǎn)足是不是i++的