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