1. 程式人生 > >JAVA FileInputStream 與 BufferedInputStream讀取效率的比較

JAVA FileInputStream 與 BufferedInputStream讀取效率的比較

通過BufferedInputStream讀取用時:114;通過InputStream讀取用時:1283 網友的疑問是,為什麼我們用了buffer(BufferedInputStream )花的時間還比沒用的時候長? 首先我們關注他們的讀取: in.read(b,0,8000) in read(byte b[], int off, int len) b[]-目標byte陣列 off 表示讀取的起始位置 len 表示要讀取的長度 在BufferedInputStream中: byte[] buf,在讀取的時候,我們會優先檢查buf中的資料。這個buf的預設大小是8M pos 表示上一次讀取的最後的位置 count表示buf中index的最後一位。buf的範圍在buf[0]-buf[count-1]之間
那麼:pos>=count,表示已經讀到buf的末尾,我們自動填充buf 否者:pos<count,我們從buf中讀取。 當我們一次讀取的資料len為8000的時候,他一次讀取的大小接近buf的總長度了(8192),幾乎此讀取BufferedInputStream都要重新填充一次buf,那還不如直接從檔案讀取效率高,因為還有填充一次buf再從buf讀取。 然後我們把len的大小都修改為128的時候,BufferedInputStream要讀取65次這樣的迴圈in.read(b,0,128)才會觸發一次fill()方法去填充buf.這樣才能提高效率。 這就是我理解的原因。 所以請不要把你要讀取的byte[]長度設定的和buf的快取區差不多大。任何東西都不是一定快和一定慢的。都是因情況而定的。