第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

bytes = in.read(buf,0,buf.length))!=-1 什么意思

while (bytes = in.read(buf,0,buf.length))!=-1) 這個是什么機制的循環(huán) 我怎么沒看懂 而且bytes的數(shù)目還能等于-1 要是能等于-1的話 那第一種代碼 不就是錯的么?


正在回答

5 回答

我感覺樓上說的有問題,int bs = read(buf,0,buf.length)運行的時候會返回讀入緩沖區(qū)的字節(jié)總數(shù),但是(注意),如果已經(jīng)到了文件末尾則返回-1,意思就是說,舉個樓上一樣的例子,我有個1024字節(jié)大小的字節(jié)數(shù)組,要讀取一個1500字節(jié)大小的數(shù)據(jù),首先第一次bs的值等于1024,不等于-1,進(jìn)入循環(huán)打印輸出,第二次bs的值等于476,不等于-1,進(jìn)入循環(huán)打印輸出,第三次bs的值等于-1,跳出循環(huán),最終是可以打印輸出1500數(shù)據(jù)的全部內(nèi)容的,在這過程中可以發(fā)現(xiàn)有個類似指針的作用,read方法它會一個一個字節(jié)輪流讀取數(shù)據(jù)(這是我的理解,僅供參考,如果有理解的錯誤的地方,也請大神們幫忙指出哈)

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

慕瓜7073846

為什么第二次bs的值會是476,第三次會是-1呢?
2018-04-11 回復(fù) 有任何疑惑可以回復(fù)我~

看了樓主的自問自答,搞懂了。

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

昵稱是JaVa

搞錯了,是 @charsandrew的自問自答。感謝。
2017-01-14 回復(fù) 有任何疑惑可以回復(fù)我~

還在嗎?

0 回復(fù) 有任何疑惑可以回復(fù)我~

我明白了,但是是通過自己寫代碼試驗+看read()方法的原代碼,明白的。我上面說的情況確實不會發(fā)生。

如果你有興趣,我講給你一下。

1 回復(fù) 有任何疑惑可以回復(fù)我~

如果你的bytes是定義的數(shù)組的話,這段代碼就是錯誤的。in.read()方法是有返回值的,返回值就是你讀取了多少個字節(jié)。最多可以讀取你定義的buf數(shù)組大小的字節(jié),如果沒有讀完會自動再往下讀取buf大小的字節(jié)。但是如果讀到一半讀完了,相當(dāng)于你的buf數(shù)組其實是沒有放滿的,那你知道實際讀取了多少字節(jié)嗎?所有才有了返回值就是bytes這個值,如果最后這個值讀出來=-1不就是讀完了嗎??

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

charsandrew

如果我第一次數(shù)據(jù)讀入數(shù)組沒讀完,第二次半途讀完了,那第二次讀取的內(nèi)容雖然寫入了數(shù)組,但由于返回值是-1,那么是不滿足循環(huán)條件的啊,也就是說后面老師打印輸出,并沒有完全將數(shù)據(jù)內(nèi)容全部打印出來。是這樣嗎?
2016-07-19 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕粉慕名而來 回復(fù) charsandrew

你到底有沒有聽老師在講課啊,老師還給你注釋的,我把注釋貼上來你再看一遍,從in中批量讀取字節(jié),放入到buf這個字節(jié)數(shù)組中,從0位置開始放,最多放buf.length。返回的是讀到字節(jié)的個數(shù)。而read方法是一個字節(jié)一個字節(jié)讀取的
2016-07-19 回復(fù) 有任何疑惑可以回復(fù)我~
#3

charsandrew 回復(fù) 慕粉慕名而來

這個問題,我搞明白了。 我之前的疑問是:比如我要讀取一個1500字節(jié)的文件,并把它輸出到控制臺,我定義一個1024字節(jié)數(shù)組來緩存讀取,第一次讀1024個字節(jié),返回的是1024;然后將1024字節(jié)輸出到控制臺。然后循環(huán)讀取,再讀剩下的476個字節(jié),因為讀完了,返回的是-1,雖然將476個字節(jié)讀進(jìn)了數(shù)組,但不滿足while的執(zhí)行條件,所以剩下的476個字節(jié)是不會輸出到控制臺的。
2016-07-19 回復(fù) 有任何疑惑可以回復(fù)我~
#4

charsandrew 回復(fù) 慕粉慕名而來

然后我寫代碼去試驗了一下,結(jié)果是全部都能輸出到控制臺。然后我就去看read()的源代碼了,發(fā)現(xiàn)api中的解釋有點誤導(dǎo)人。實際上讀到,在返回-1之前,是先返回476的,然后再次循環(huán)讀取,返回-1。看下源代碼一切都明白了,哈哈
2016-07-19 回復(fù) 有任何疑惑可以回復(fù)我~
#5

qq_析木_0 回復(fù) charsandrew

請問是不是因為read方法是一個字節(jié)一個字節(jié)的讀的,后面476個字節(jié)也依次輸出了,再往后讀第477個字節(jié)時,因為返回-1,所以退出循環(huán)?
2017-03-04 回復(fù) 有任何疑惑可以回復(fù)我~
#6

MartinCode

我有些不太懂, in.read(buf,0,buf.length)雖然第一次沒讀完返回的是字節(jié)數(shù),第二次再讀是繼續(xù)往下讀,但是他定義了buf,0,buf.length,應(yīng)該再從第一個位置讀吧???
2017-03-23 回復(fù) 有任何疑惑可以回復(fù)我~
#7

慕瓜7073846 回復(fù) charsandrew

為什么讀完了會返回-1呢
2018-04-11 回復(fù) 有任何疑惑可以回復(fù)我~
查看4條回復(fù)

舉報

0/150
提交
取消

bytes = in.read(buf,0,buf.length))!=-1 什么意思

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號