亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

while循環是不是存在問題的

最后這個while循環不會一直在那從0開始read循環嗎 ?因為bytes不等于-1啊 是不是有問題

正在回答

4 回答

read(buf,0,b)是把讀到的數據存到buf這個數組里面去,從0到b!返回值是讀的字節數!

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

read()返回的是放入數組buf的大小,前面定義buf大小為8*1024,單位字節,假設一個文件大小為13192字節,讀三次才能讀完,第一次讀8192字節,bytes=8192,然后打印出來,第二次,in.read(buf,0,buf.length)=5000,然后前面byte數組中前5000個字節被覆蓋,然后for循環把這5000個字節打印出來,第三次沒東西讀了,返回-1,結束循環。而這時候buf的大小還是8192,第二次只是覆蓋了前面的,AIP也解釋的很不清楚:這些字節將存儲在 b[off] 到 b[off+k-1] 的元素中,不影響 b[off+k] 到 b[off+len-1] 的元素

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

TiGer196

bytes第一次 =8192,第二次 =5000,第三次 =-1
2017-02-08 回復 有任何疑惑可以回復我~
#2

java_jun 提問者 回復 TiGer196

嗯吶 謝謝了哈 原來是覆蓋了啊
2017-02-08 回復 有任何疑惑可以回復我~
#3

KingAmo 回復 TiGer196

第二次就應該讀到文件結尾了啊,為什么還要讀第三次?我以為第二次bytes就會是-1。。能解釋一下嗎,謝謝
2017-06-21 回復 有任何疑惑可以回復我~
#4

TiGer196 回復 KingAmo

1b都沒有了才是-1,第二次還有數據啊
2017-06-21 回復 有任何疑惑可以回復我~
查看1條回復

。。但是while里面每次都是寫的從0開始的

while((bytes = in.read(buf,0,buf.length)) != -1)

還有個問題 一次就讀取滿了buf這個數組,下次再讀進去不是放不進去了嗎 ?大神講解下

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

while沒錯 ?對象.read(byte[] b, int off, int len);//方法是這樣的:從對象中讀取len個字節放進b中,每次從b中off位置開始放,.但是老師對于這塊有一個問題沒講清,我的理解是:文件指針從0開始讀取,每次讀取,指針后移一次,讀取完一組字節,此時指針已經移動到了下一個未讀取的位置,下次while循環時,從指針的位置繼續讀取,往放入b中 ?從b的off位置又開始放,知道放滿,每次循環。當read方法讀取到結尾時,返回值為-1,bytes接受該返回值,作為循環結束條件。(可能有錯誤的地方,同求大神指明)

2 回復 有任何疑惑可以回復我~
#1

java_jun 提問者

。。但是while里面每次都是寫的從0開始的 while((bytes = in.read(buf,0,buf.length)) != -1) 還有個問題 一次就讀取滿了buf這個數組,下次再讀進去不是放不進去了嗎 大神講解下
2017-02-06 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

while循環是不是存在問題的

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號