buffer對象的api實作案例
buffer的基本操作
//1.基本操作
//建立指定長度的緩沖區,類似c語言的malloc函數。一旦定義cap容量不變。
IntBuffer buffer = IntBuffer.allocate(10);
//初始化之後,buffer的列印狀态[pos=0 lim=10 cap=10]
System.out.println("init buffer = " + buffer);
//put,寫入方法,會影響pos的位置,不影響limit的位置
buffer.put(1);//pos:0---》1
buffer.put(2);//pos:1--》2
buffer.put(3);//pos:2---》3
//[pos=3 lim=10 cap=10]
System.out.println("buffer after put= " + buffer);
//複位buffer,即pos置為0,limit設定為實際的元素數量,可以了解為讀寫的模式的切換。
buffer.flip();
//複位buffer之後,[pos=0 lim=3 cap=10]
System.out.println("buffer after flip= " + buffer);
//讀取下表為1的元素,下标是從0開始的。取出來2
System.out.println("buffer[1] = " + buffer.get(1));
//get之後,pos位置不變[pos=0 lim=3 cap=10]
System.out.println("buffer after get = " + buffer);
//指定位置放入元素
buffer.put(1,4);
//指定位置放入元素,pos位置不變。
System.out.println("buffer after put(index,change)= " + buffer);
//周遊buffer中的元素
for (int i = 0; i < buffer.limit(); i++) {
//get方法執行一次,pos++
System.out.println(buffer.get());
}
wrap(包裹)方法的使用
//2.wrap方法的使用
//wrap方法會包裹一個數組:一般這種方法不會先初始化緩存對象的長度,因為沒有意義。
// 最後還是會被wrap所包裹的數組覆寫掉。
//并且wrap對象修改緩沖區對象的時候,數組本身也發生着變化。
int[] arr = new int[]{1,2,5};
IntBuffer buffer1 = IntBuffer.wrap(arr);
System.out.println("buffer1 = " + buffer1);
//還可以選擇具體的部分元素存入buffer中,這種寫法是放入第1,2個元素。
IntBuffer buffer2 = IntBuffer.wrap(arr,0,2);
//這種使用方式,buffer的容量為數組的長度3,但是可操作元素隻有放入的2個。是以wrap方法改變limit
System.out.println("buffer2 = " + buffer2);
其他方法
//3.其他方法
//往緩沖區中放入具體的數組[pos=3 lim=10 cap=10]
IntBuffer buffer = IntBuffer.allocate(10);
int[] arr = new int[]{1,2,4};
buffer.put(arr);
System.out.println("buffer = " + buffer);
//實作複制:[pos=3 lim=10 cap=10]
IntBuffer buffer1 = buffer.duplicate();
System.out.println("buffer1 = " + buffer1);
//定位pos屬性的方法:[pos=1 lim=10 cap=10]
buffer.position(1);
System.out.println("buffer = " + buffer);
//找到刻度資料remaining,limit-pos獲得該資料,含義為可讀資料。
System.out.println("buffer.remaining = " + buffer.remaining());
//将緩沖區的資料放入數組中備用
int[] arr2 = new int[buffer.remaining()];
buffer.get(arr2);
for (int i:arr2) {
System.out.println("i = " + i);
}