Java網絡編程從入門到精通(34):讀寫緩沖區中的數據—使用get和put方法按順序讀寫單個數據 – JAVA編程語言程序開發技術文章

對於緩沖區來說,最重要的操作就是讀寫操作。緩沖區提供瞭兩種方法來讀寫緩沖區中的數據:get、put方法和array方法。而get、put方法可以有三種讀寫數據的方式:按順序讀寫單個數據、在指定位置讀寫單個數據和讀寫數據塊。除瞭上述的幾種讀寫數據的方法外,CharBuffer類還提供瞭用於專門寫字符串的put和append方法。在本文及後面的文章中將分別介紹這些讀寫緩沖區的方法。

雖然使用allocate方法創建的緩沖區並不是一次性地分配內存空間,但我們可以從用戶地角度將一個緩沖區想象成一個長度為capacity的數組。當緩沖區創建後,和數組一樣,緩沖區的大小(capacity值)將無法改變,也無法訪問緩沖區外的數據。如下面的代碼創建瞭一個大小為6的字節緩沖區。


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>ByteBuffer byteBuffer = ByteBuffer.allocate(6);

對於byteBuffer來說,隻能訪問屬於這個緩沖區的六個字節的數據,如果超過瞭這個范圍,將拋出一個BufferOverflowException異常,這是一個運行時錯誤,因為這個錯誤隻能在程序運行時被發現。


既然緩沖區和數組類似,那麼緩沖區也應該象數組一樣可以標識當前的位置。緩沖區的position方法為我們提供瞭這個功能。position方法有兩種重載形式,它們的定義如下:


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>public final int position()
public final Buffer position(int newPosition)

第一個重載形式用來獲取緩沖區的當前位置。在創建緩沖區後,position的初始值是0,也就是緩沖區第一個元素的位置。當從緩沖區讀取一個元素後,position的值加1。我們從這一點可以看出,position方法返回的位置就是當前可以讀取的元素的位置。position的取值范圍從0到capacity – 1。如果position的值等於capacity,說明緩沖區當前已經沒有數據可讀瞭。


position方法的第二個重載形式可以設置緩沖區的當前位置。參數newPosition的取值范圍是0 <= newPosition < capacity。如果newPosition的值超出這個范圍,position方法就會拋出一個IllegalArgumentException異常。


在大多數情況下不需要直接控制緩沖區的位置。緩沖區類提供的用於讀寫數據的方法可以自動地設置緩沖區的當前位置。在緩沖區類中,get和put方法用於讀寫緩沖區中的數據。get和put方法的定義如下:


ByteBuffer類的getput方法:


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>public abstract byte get()            
public abstract ByteBuffer put(byte b)

IntBuffer類的getput方法:


<!–

Code highlighting produced by Actipro CodeHighlighter (freeware)
https://www.CodeHighlighter.com/

–>public abstract int get()            
public abstract IntBuffer put(int i)

其他五個緩沖區類中的get和put方法定義和上面的定義類似,隻是get方法返回

發佈留言