bytes = in.read(buf,0,buf.length))!=-1 什么意思
while (bytes = in.read(buf,0,buf.length))!=-1) 這個是什么機制的循環 我怎么沒看懂 而且bytes的數目還能等于-1 要是能等于-1的話 那第一種代碼 不就是錯的么?
while (bytes = in.read(buf,0,buf.length))!=-1) 這個是什么機制的循環 我怎么沒看懂 而且bytes的數目還能等于-1 要是能等于-1的話 那第一種代碼 不就是錯的么?
2016-07-18
舉報
2017-04-07
我感覺樓上說的有問題,int bs = read(buf,0,buf.length)運行的時候會返回讀入緩沖區的字節總數,但是(注意),如果已經到了文件末尾則返回-1,意思就是說,舉個樓上一樣的例子,我有個1024字節大小的字節數組,要讀取一個1500字節大小的數據,首先第一次bs的值等于1024,不等于-1,進入循環打印輸出,第二次bs的值等于476,不等于-1,進入循環打印輸出,第三次bs的值等于-1,跳出循環,最終是可以打印輸出1500數據的全部內容的,在這過程中可以發現有個類似指針的作用,read方法它會一個一個字節輪流讀取數據(這是我的理解,僅供參考,如果有理解的錯誤的地方,也請大神們幫忙指出哈)
2017-01-14
看了樓主的自問自答,搞懂了。
2016-09-13
還在嗎?
2016-07-19
我明白了,但是是通過自己寫代碼試驗+看read()方法的原代碼,明白的。我上面說的情況確實不會發生。
如果你有興趣,我講給你一下。
2016-07-18
如果你的bytes是定義的數組的話,這段代碼就是錯誤的。in.read()方法是有返回值的,返回值就是你讀取了多少個字節。最多可以讀取你定義的buf數組大小的字節,如果沒有讀完會自動再往下讀取buf大小的字節。但是如果讀到一半讀完了,相當于你的buf數組其實是沒有放滿的,那你知道實際讀取了多少字節嗎?所有才有了返回值就是bytes這個值,如果最后這個值讀出來=-1不就是讀完了嗎??