bytes = in.read(buf,0,buf.length))!=-1 什么意思
while (bytes = in.read(buf,0,buf.length))!=-1) 這個是什么機制的循環(huán) 我怎么沒看懂 而且bytes的數(shù)目還能等于-1 要是能等于-1的話 那第一種代碼 不就是錯的么?
while (bytes = in.read(buf,0,buf.length))!=-1) 這個是什么機制的循環(huán) 我怎么沒看懂 而且bytes的數(shù)目還能等于-1 要是能等于-1的話 那第一種代碼 不就是錯的么?
2016-07-18
舉報
2017-04-07
我感覺樓上說的有問題,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ù)(這是我的理解,僅供參考,如果有理解的錯誤的地方,也請大神們幫忙指出哈)
2017-01-14
看了樓主的自問自答,搞懂了。
2016-09-13
還在嗎?
2016-07-19
我明白了,但是是通過自己寫代碼試驗+看read()方法的原代碼,明白的。我上面說的情況確實不會發(fā)生。
如果你有興趣,我講給你一下。
2016-07-18
如果你的bytes是定義的數(shù)組的話,這段代碼就是錯誤的。in.read()方法是有返回值的,返回值就是你讀取了多少個字節(jié)。最多可以讀取你定義的buf數(shù)組大小的字節(jié),如果沒有讀完會自動再往下讀取buf大小的字節(jié)。但是如果讀到一半讀完了,相當(dāng)于你的buf數(shù)組其實是沒有放滿的,那你知道實際讀取了多少字節(jié)嗎?所有才有了返回值就是bytes這個值,如果最后這個值讀出來=-1不就是讀完了嗎??