容量(capacity):緩衝區能夠容納的資料元素的最大數量。這一容量在緩衝區建立時被設定,並且永遠不能被改變
上界(limit):緩衝區的第乙個不能被讀或寫的元素。或者說,緩衝區中現存元素的計數。(要是position已經到達limit的位置,此時再呼叫get()方法會報indexoutofbound***ception異常)
位置(position):下乙個要被讀或寫的元素的索引。位置會自動由相應的 get( )和 put( )函式更新
標記(mark):下乙個要被讀或寫的元素的索引。
*記住以下公式:
0 <= mark <= position <= limit <= capacity
一旦讀完buffer中的資料,需要讓buffer準備好再次被寫入。可以通過clear()或compact()方法來完成。
如果呼叫的是clear()方法,position將被設回0,limit被設定成 capacity的值。換句話說,buffer 被清空了。buffer中的資料並未清除,只是這些標記告訴我們可以從**開始往buffer裡寫資料。
如果buffer中有一些未讀的資料,呼叫clear()方法,資料將「被遺忘」,意味著不再有任何標記會告訴你哪些資料被讀過,哪些還沒有。
如果buffer中仍有未讀的資料,且後續還需要這些資料,但是此時想要先先寫些資料,那麼使用compact()方法。
compact()方法將所有未讀的資料拷貝到buffer起始處。然後將position設到最後乙個未讀元素正後面。limit屬性依然像clear()方法一樣,設定成capacity。現在buffer準備好寫資料了,但是不會覆蓋未讀的資料。
public static void main(string args)
}
上述的程式將會持續輸出「你」字,並進入無窮迴圈。
可以使用equals()和compareto()方法兩個buffer。
equals()
當滿足下列條件時,表示兩個buffer相等:
有相同的型別(byte、char、int等)。
buffer中剩餘的byte、char等的個數相等。
buffer中所有剩餘的byte、char等都相同。
如你所見,equals只是比較buffer的一部分,不是每乙個在它裡面的元素都比較。實際上,它只比較buffer中的剩餘元素。
compareto()
compareto()方法比較兩個buffer的剩餘元素(byte、char等), 如果滿足下列條件,則認為乙個buffer「小於」另乙個buffer:
第乙個不相等的元素小於另乙個buffer中對應的元素 。
所有元素都相等,但第乙個buffer比另乙個先耗盡(第乙個buffer的元素個數比另乙個少)。(剩餘元素是從 position到limit之間的元素)
JAVA NIO系列(三) Buffer 解讀
nio中的buffer用於和通道互動,資料是從通道讀入緩衝區,從緩衝區中寫入通道的。buffer就像乙個陣列,可以儲存多個型別相同的資料。每種基本資料型別都有對應的buffer類 1 capacity 容量 buffer本質是乙個陣列,在初始化時有固定的大小,這個值就是容量。容量不可改變,一旦緩衝區...
Java NIO 三 緩衝區Buffer
緩衝區本質上是一塊可以寫入資料,然後可以從中讀取資料的記憶體。這塊記憶體被包裝成nio buffer物件,並提供了一組方法,用來方便的訪問該塊記憶體。capacity capacity代表著buffer的固定大小值,能存放的最大值不超過capacity。position limit mark buf...
java nio中buffer緩衝區一些方法
flip 翻轉 我們已經寫滿了緩衝區,現在我們必須準備將其清空。我們想把這個緩衝區傳遞給乙個通道,以使內容能被全部寫出。但如果通道現在在緩衝區上執行get 那麼它將從我們剛剛插入的有用資料之外取出未定義資料。如果我們將位置值重新設為0,通道就會從正確位置開始獲取,但是它是怎樣知道何時到達我們所插入資...