0
標準成語(-1):當讀取數據流,從流中讀取時檢查EOF爲什麼不停止迭代時0字節讀
while((bytesRead = inputStream.read(buffer)) != -1)
這看起來很標準 - 我查源流行像Apache Commons這樣的圖書館,它似乎是事實上的標準。
爲什麼我們不停止在0? > -1
會更好嗎?當我們什麼都沒讀時,爲什麼在循環中做任何工作?
標準成語(-1):當讀取數據流,從流中讀取時檢查EOF爲什麼不停止迭代時0字節讀
while((bytesRead = inputStream.read(buffer)) != -1)
這看起來很標準 - 我查源流行像Apache Commons這樣的圖書館,它似乎是事實上的標準。
爲什麼我們不停止在0? > -1
會更好嗎?當我們什麼都沒讀時,爲什麼在循環中做任何工作?
基本上是因爲它毫無意義。查看documentation:
如果
b
的長度爲零,則不讀取字節並返回0;否則,嘗試讀取至少一個字節。如果由於流位於文件末尾而沒有可用字節,則返回值-1;否則,至少讀取一個字節並存儲到b
中。
所以,除非你在空緩衝區正在傳遞(這基本上是在幾乎所有情況下的錯誤;我個人希望該方法將拋出在這種情況下的例外),返回值將永遠是0 。它會阻塞至少一個字節被讀取(在這種情況下返回值將是1或更多),或者到達流的末尾(在這種情況下返回值將是-1)。
不應該將最後一位讀爲「在這種情況下返回值是-1」? – VGR
@VGR:哎呀,是的 - 修正:) –