Buffer
定義描述:
說白了,就是一種容器,而這種容器就是專門用來存儲一種指定的原始數據類型(基本數據類型int, byte,char,long,short等);
類似參考的概念有集合List,數組,Set, Tree等等
特性描述
buffer是線性的,有限的基本類型元素的組合;//因爲底層是數組
每個緩衝區buffer都是可讀的,但並不是每個buffer都是可寫的;
Buffer並不是線程安全的,如果多個線程訪問buffer時,最好使用同步策略synchronization;
Buffer提倡使用調用鏈的方式進行調用,如b.flip().position(23).limit(42)
從buffer中可以獲取到什麼信息?或者說,從buffer中,能瞭解到什麼?有什麼信息是對我們有用的?
//【閒外話:爲什麼會有這麼多問題,其實我是想從不同的角度去理解一件事物,事物可能從不同的角度表現出來的屬性是不一樣的,這樣可以讓我更加全方位的理解,因爲有的時候,當別人突然問我時,不知所措;】
buffer裏的數據內容,就是你存進緩存buffer裏的內容
三個指針吧capacity, limit, position;通過這三個指針,你可以對buffer的整體情況瞭解
capacity, limit, position 表示什麼意思
capacity:就是緩存的最大值,此屬性的特點就是不可能爲負值,buffer一旦創建,就會不改變
limit:就是當前實際可以存儲的最大容量
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的子類都有哪些?
很明顯,目前Buffer的子類還是很豐富的,73個。
常用的有哪些呢?
ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
StringCharBuffer
MappedByteBuffer