他与fileinputstream 的区别是什么呀?他不是自带缓冲区吗?为什么还需要指定一个byte数组?
认证0级讲师
它的快取和你自己的快取不是一個概念。大概流程如下。
使用不含快取的inputstream時
每次你讀取時,系統執行讀取操作把資料讀出來,你指定讀一個字節那就讀一個字節,指定一個數組那就讀一個數組的,你的程式和資料的讀取效率有非常大的關係。
而使用bufferedinputstream時,是這樣的bufferedinputstream时,是这样的
bufferedinputstream
当你创建bufferedinputstream 當你建立bufferedinputstream,後他會立即去讀資料然後放到jvm管理的記憶體裡,每次你讀取時,他不會再去系統中讀取,會去記憶體讀取資料,之後再判斷記憶體中剩下的還多不,不多就再由它去指揮系統讀取操作,不論你是讀一個字節還是一個數組,系統都不一定會去操作硬碟。
換個角度想,如果你用不帶buffer的流,打開文件然後立即關閉,系統不會有任何資料調用,關閉會很快執行。 而你用帶buffer的流打開文件,哪怕沒讀取就立即執行關閉了,這個關閉也不會立即執行,而且系
,會比用不帶buffer的效率低。
緩衝和使用數組接收兩者沒有關係呀,並沒有說有了緩衝就不用數組接收內容了呀。
因為希望能重複使用這個byte[],否則在面對大數據流IO傳輸時,你會發現YGC開心得不要不要的
它的快取和你自己的快取不是一個概念。大概流程如下。
每次你讀取時,系統執行讀取操作把資料讀出來,你指定讀一個字節那就讀一個字節,指定一個數組那就讀一個數組的,你的程式和資料的讀取效率有非常大的關係。
当你创建
你的程式和資料讀取的效率關聯就非常微小了。bufferedinputstream
當你建立bufferedinputstream
,後他會立即去讀資料然後放到jvm管理的記憶體裡,每次你讀取時,他不會再去系統中讀取,會去記憶體讀取資料,之後再判斷記憶體中剩下的還多不,不多就再由它去指揮系統讀取操作,不論你是讀一個字節還是一個數組,系統都
不一定會去操作硬碟。
統也已經把一部分數據讀取的內存了換個角度想,如果你用不帶buffer的流,打開文件然後立即關閉,系統
不會有任何資料調用,關閉會很快執行。 而你用帶buffer的流打開文件,哪怕沒讀取就立即執行關閉了,這個關閉也不會立即執行,而且系
,會比用不帶buffer的效率低。
🎜當然應該沒人會閒的無聊到創建流之後不讀取就關閉吧? 🎜緩衝和使用數組接收兩者沒有關係呀,並沒有說有了緩衝就不用數組接收內容了呀。
因為希望能重複使用這個byte[],否則在面對大數據流IO傳輸時,你會發現YGC開心得不要不要的