搜尋

首頁  >  問答  >  主體

java - bufferedinputstream也需要指定一个数组长度呀?并没有什么用呀?

他与fileinputstream 的区别是什么呀?他不是自带缓冲区吗?为什么还需要指定一个byte数组?

PHP中文网PHP中文网2822 天前720

全部回覆(3)我來回復

  • 阿神

    阿神2017-04-17 17:50:10

    它的快取和你自己的快取不是一個概念。大概流程如下。

    使用不含快取的inputstream時

    每次你讀取時,系統執行讀取操作把資料讀出來,你指定讀一個字節那就讀一個字節,指定一個數組那就讀一個數組的,你的程式和資料的讀取效率有非常大的關係。

    而使用bufferedinputstream時,是這樣的bufferedinputstream时,是这样的

    当你创建bufferedinputstream 當你建立bufferedinputstream,後他會
    立即去讀資料然後放到jvm管理的記憶體裡,每次你讀取時,他不會再去系統中讀取,會去記憶體讀取資料,之後再判斷記憶體中剩下的還多不,不多就再由它去指揮系統讀取操作,不論你是讀一個字節還是一個數組,系統都
    不一定會去操作硬碟。

    你的程式和資料讀取的效率關聯就非常微小了。


    換個角度想,如果你用不帶buffer的流,打開文件然後立即關閉,系統
    不會有任何資料調用,關閉會很快執行。 而你用帶buffer的流打開文件,哪怕沒讀取就立即執行關閉了,這個關閉也不會立即執行,而且系

    統也已經把一部分數據讀取的內存了

    ,會比用不帶buffer的效率低。

    🎜當然應該沒人會閒的無聊到創建流之後不讀取就關閉吧? 🎜

    回覆
    0
  • PHPz

    PHPz2017-04-17 17:50:10

    緩衝和使用數組接收兩者沒有關係呀,並沒有說有了緩衝就不用數組接收內容了呀。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:50:10

    因為希望能重複使用這個byte[],否則在面對大數據流IO傳輸時,你會發現YGC開心得不要不要的

    回覆
    0
  • 取消回覆