老師這里創(chuàng)建字節(jié)數(shù)組循環(huán)讀取大文件是不是有bug呢?
我查了下api中這里read的返回值為:讀入緩沖區(qū)的字節(jié)總數(shù),如果因為已經(jīng)到達文件末尾而沒有更多的數(shù)據(jù),則返回 -1。
那么如果我有一個數(shù)組一次性讀不完的文件,比如需要兩次讀完,那么第一次讀完后bytes返回值為1024,然后再while()循環(huán)里面打印輸出。第二次讀完了,并且返回了-1,此時雖然文件讀入了數(shù)組,但是bytes=-1,不滿足循環(huán)條件,循環(huán)里面就沒執(zhí)行,就沒有打印輸出??!
? 是這樣的嗎?還是我理解錯了,希望我有把疑惑說清楚。。。
2016-07-19
不知道。。。
2016-07-23
厲害~~~
2016-07-19
然后我寫代碼去試驗了一下,結果是全部都能輸出到控制臺。然后我就去看read()的源代碼了,發(fā)現(xiàn)api中的解釋有點誤導人。實際情況是,在讀第二次的476個字節(jié)時,如果讀到文件結束,下一個字節(jié)為空,會先返回476,然后再次讀取,這次直接返回-1。
看下read()的源代碼就很清楚了,源碼其實寫的很簡單。
2016-07-19
哈哈,這個問題還是我自己來解答吧。
我之前的疑問是:比如我要讀取一個1500字節(jié)的文件,并把它輸出到控制臺,我定義一個1024字節(jié)數(shù)組來緩存讀取,第一次讀1024個字節(jié),返回的是1024;然后將1024字節(jié)輸出到控制臺。然后循環(huán)讀取,再讀剩下的476個字節(jié),因為讀完了,返回的是-1,雖然將476個字節(jié)讀進了數(shù)組,但不滿足while的執(zhí)行條件,所以剩下的476個字節(jié)是不會輸出到控制臺的。