Java NIO 之 Buffer

Buffer

  • 定義描述:

    說白了,就是一種容器,而這種容器就是專門用來存儲一種指定的原始數據類型(基本數據類型int, byte,char,long,short)

類似參考的概念有集合List,數組,Set, Tree等等

  • 特性描述

  1. buffer是線性的,有限的基本類型元素的組合;//因爲底層是數組

  2. 每個緩衝區buffer都是可讀的,但並不是每個buffer都是可寫的;

  3. Buffer並不是線程安全的,如果多個線程訪問buffer時,最好使用同步策略synchronization;

  4. Buffer提倡使用調用鏈的方式進行調用,如b.flip().position(23).limit(42)

 

  • buffer中可以獲取到什麼信息?或者說,從buffer中,能瞭解到什麼?有什麼信息是對我們有用的?

//【閒外話:爲什麼會有這麼多問題,其實我是想從不同的角度去理解一件事物,事物可能從不同的角度表現出來的屬性是不一樣的,這樣可以讓我更加全方位的理解,因爲有的時候,當別人突然問我時,不知所措;】

  1. buffer裏的數據內容,就是你存進緩存buffer裏的內容

  2. 三個指針吧capacity, limit, position;通過這三個指針,你可以對buffer的整體情況瞭解




  • capacity, limit, position 表示什麼意思

  1. capacity:就是緩存的最大值,此屬性的特點就是不可能爲負值,buffer一旦創建,就會不改變

  2. limit:就是當前實際可以存儲的最大容量

  3. position: 就是進行當前讀或者寫的位置。




  • capacity limit的區別?

    capacity表示的是創建緩存時,指定的存儲大小,這個值是不能改變的,

    limit是實際存儲的大小,這個值是可以改變的

    比方說,一個完整的5L水桶,上面有1L,2L,3L,4L的刻度,

    那麼,capacity就是5L,這個值是不會改變的

    limit呢?如果我們規定此水桶只能裝到2L,那麼limit就是2L了,雖然此水桶最大可以存5L,但實際只能存儲到2L

  • mark, position, limit, capacity的大小關係

    mark <= position <= limit <=capacity

 

  • clear() API

    使用場景:從管道中讀數據到緩存,也就是類似於put操作

    操作的結果:limit = capacity,position = 0

  • flip() API

    使用場景:將緩存中的數據,寫到管道中去,類似於get操作;

    操作的結果:limit = position,position = 0

  • flip() clear()的區別?

    你可以把緩衝區當做爲參考對象,如果你打算往緩衝區裏 寫入數據的話,就使用clear()操作(很明顯的,只有清除clear了舊的數據,新的數據纔可以進來啊)

    相反,如果你打算從緩衝區裏僅僅是讀取數據的話,就可以使用flip方法。

    很明顯,一個針對的是讀,一個針對是寫

  • Buffer的子類都有哪些?


wKiom1nPTuaxWPaFAABDb0RSlCQ954.png


很明顯,目前Buffer的子類還是很豐富的,73個。

  • 常用的有哪些呢?


    1. ByteBuffer

    2. CharBuffer

    3. DoubleBuffer

    4. FloatBuffer

    5. IntBuffer

    6. LongBuffer

    7. ShortBuffer

    8. StringCharBuffer

    9. MappedByteBuffer


wKiom1nPT1vCYfugAAA_5oeP4WE873.png

wKiom1nPT1vgtHwYAAA-bhKOinc435.png

wKioL1nPTxjQh6TRAAAylC0xbh4530.png

wKioL1nPTxjxLr0RAABe5W67fbA694.png






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章