(一)JAVA NIO BUFFER
1.变量:
capacity: 指定了可以存储在缓冲区中的最大数据容量,实际上,它指定了底层数组的大小,或者至少是指定了准许我们使用的底层数组的容量。
position: 下一次读取或写入的位置。(每次调用get put方法+1)
limit:指定还有多少数据需要取出,或者还有多少空间可以放入数据。(每次调用get put方法时候,通过position与limit对比)
2.方法:
get:position + 1
put:position + 1
flip:limit = position position = 0 mark = -1
clear:limit = capacity position = 0 mark = -1
mark: mark = position
reset:position = m;
duplicate:浅拷贝(每个缓存区的上界、容量、位置等属性是各自独立的)
3.代码
BufferTest.java
public class BufferTest {
public static void main(String[] args) {
IntBuffer buff = IntBuffer.allocate(10);
buff.get();
buff.put(1);
buff.get();
buff.put(2);
buff.get();
buff.put(3);
buff.mark();
buff.get();
buff.put(4);
buff.get();
buff.put(5);
System.out.println(" ========== init ========== ");
System.out.println("capacity:\t" + buff.capacity());
System.out.println("limit:\t" + buff.limit());
System.out.println("position:\t" + buff.position());
System.out.println();
buff.reset();
System.out.println(" ========== mark reset ========== ");
System.out.println("capacity:\t" + buff.capacity());
System.out.println("limit:\t" + buff.limit());
System.out.println("position:\t" + buff.position());
System.out.println();
buff.flip();
System.out.println(" ========== flip ========== ");
System.out.println("capacity:\t" + buff.capacity());
System.out.println("limit:\t" + buff.limit());
System.out.println("position:\t" + buff.position());
for (int i = 0; i < buff.limit(); i++) {
System.out.print(buff.get() + "\t");
}
System.out.println();
System.out.println();
buff.clear();
System.out.println(" ========== clear ========== ");
System.out.println("capacity:\t" + buff.capacity());
System.out.println("limit:\t" + buff.limit());
System.out.println("position:\t" + buff.position());
for (int i = 0; i < buff.limit(); i++) {
System.out.print(buff.get() + "\t");
}
System.out.println();
System.out.println();
//重新数据初始化
System.out.println(" ========== duplicate ========== ");
buff.clear();
IntBuffer copyIntBuffer = buff.duplicate();
buff.get();
buff.put(2);
System.out.println(" ========== buff duplicate ========== ");
System.out.println("capacity:\t" + buff.capacity());
System.out.println("limit:\t" + buff.limit());
System.out.println("position:\t" + buff.position());
System.out.println(buff);
System.out.println(" ========== copyIntBuffer duplicate ========== ");
System.out.println("capacity:\t" + copyIntBuffer.capacity());
System.out.println("limit:\t" + copyIntBuffer.limit());
System.out.println("position:\t" + copyIntBuffer.position());
for (int i = 0; i < buff.limit(); i++) {
System.out.print(copyIntBuffer.get() + "\t");
}
System.out.println();
}
}
4.Console
========== init ==========
capacity: 10
limit: 10
position: 10
========== mark reset ==========
capacity: 10
limit: 10
position: 6
========== flip ==========
capacity: 10
limit: 6
position: 0
0 1 0 2 0 3
========== clear ==========
capacity: 10
limit: 10
position: 0
0 1 0 2 0 3 0 4 0 5
========== duplicate ==========
========== buff duplicate ==========
capacity: 10
limit: 10
position: 2
java.nio.HeapIntBuffer[pos=2 lim=10 cap=10]
========== copyIntBuffer duplicate ==========
capacity: 10
limit: 10
position: 0
0 2 0 2 0 3 0 4 0 5