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

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

while((bytes = in.read(buf,0,buf.length))!=-1)這里有疑問

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

搞不明白,假如文件100字節,數組buf容量80字節,第一次讀完的時候bytes等于80,然后執行完后邊的代碼,程序如何回到while循壞呢?

不是已經這樣了嗎 bytes=80!=-1,不應該是一個死循環嗎?有些理解不了這個

而且就算我現在當做能明白這個循環為什么能進行了,可buf數組在第一次循環的時候已經被填滿了呀,第二次去循環的時候,是把剩下的20字節覆蓋進去嗎?而且in.read(buf,0,buf.length))這里第二個參數是“0”,也沒有看出來任何地方對這個參數有修改,程序怎么知道應該是從81位開始讀呢?


正在回答

3 回答


    • 讀入緩沖區的總字節數,如果沒有更多的數據,因為文件的結尾已經到達, -1 。?

剛查了下API文檔,一樓的回復太給力了,讓我也懂了

0 回復 有任何疑惑可以回復我~
/**
?*?Reads?a?byte?of?data?from?this?input?stream.?This?method?blocks
?*?if?no?input?is?yet?available.
?*
?*?@return?????the?next?byte?of?data,?or?<code>-1</code>?if?the?end?of?the
?*?????????????file?is?reached.
?*?@exception??IOException??if?an?I/O?error?occurs.
?*/
public?int?read()?throws?IOException?{
????return?read0();
}

read()方法返回的是下一個字節

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

in.read(buf,0,buf.length),這個方法返回的是它讀取到的字節個數!

正如你假設的,文件100字節,buf容量80字節:

第一次讀取的時候是返回80;

第二次進入while的時候,文件讀取的字節是從第81個字節開始(讀取的時候文件有個指針一邊讀一邊移動的,前面老師講過),就是說文件還剩下20個字節可讀,所以這時候返回的字節是20;

第三次進入while的時候,文件已經沒有內容可讀了,所以返回的是-1;

這時候就跳出了while!

純手打!望采納!

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

zxj2333

問一下,在第二次的時候,文件只剩下20個字節可以讀,但是當read()方法讀到第20個字節時,檢查到這是流的結尾時,不是返回-1嗎?為什么是20
2018-10-19 回復 有任何疑惑可以回復我~
#2

慕容6072474 回復 zxj2333

你那個應該是只符合單字節的規則
2018-12-01 回復 有任何疑惑可以回復我~
#3

我愛孫佳怡

牛逼,瞬間懂了
2019-05-20 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

while((bytes = in.read(buf,0,buf.length))!=-1)這里有疑問

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

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

幫助反饋 APP下載

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

公眾號

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