他与fileinputstream 的区别是什么呀?他不是自带缓冲区吗?为什么还需要指定一个byte数组?
阿神2017-04-17 17:50:10
它的快取和你自己的快取不是一個概念。大概流程如下。
使用不含快取的inputstream時
每次你讀取時,系統執行讀取操作把資料讀出來,你指定讀一個字節那就讀一個字節,指定一個數組那就讀一個數組的,你的程式和資料的讀取效率有非常大的關係。
而使用
bufferedinputstream
時,是這樣的bufferedinputstream
时,是这样的
当你创建bufferedinputstream
當你建立bufferedinputstream
,後他會
立即去讀資料然後放到jvm管理的記憶體裡,每次你讀取時,他不會再去系統中讀取,會去記憶體讀取資料,之後再判斷記憶體中剩下的還多不,不多就再由它去指揮系統讀取操作,不論你是讀一個字節還是一個數組,系統都
不一定會去操作硬碟。
換個角度想,如果你用不帶buffer的流,打開文件然後立即關閉,系統
不會有任何資料調用,關閉會很快執行。 而你用帶buffer的流打開文件,哪怕沒讀取就立即執行關閉了,這個關閉也不會立即執行,而且系
,會比用不帶buffer的效率低。
🎜當然應該沒人會閒的無聊到創建流之後不讀取就關閉吧? 🎜