ByteBuffer就是字節緩衝區.那什麼是字節緩衝區?舉個例子:就比如CPU和硬盤之間的內存。明白了吧。java
顧名思義,它是用來存放字節的。很經常使用的地方就是程序向網絡中傳送數據的時候。緩存
要使用ByteBuffer,理解其中3個指針式很重要的。position、limit和capacity
而且這三個指針的關係是 position<=limit<=capacity.網絡
position是當前讀寫的位置。
limit是最大能讀寫的位置。
capacity是緩存的容量。
看一段程序:
1:ByteBuffer buffer = ByteBuffer.allocate(5); position=0,limit=5,capacity=5
2:buffer.put((byte)1); position=1,limit=5,capacity=5
3:buffer.flip(); position=0,limit=1,capacity=5
4:buffer.get(); position=1,limit=1,capacity=5post
第一行:建立一個ByteBuffer,初始化狀態下,postion爲0,limit=capacity=緩衝區大小
第二行:往緩衝區放一個字節,position就會日後移動一下,可是不會超過limit。若是超過會報錯。
第三行: flip方法會把limit設爲position的值,而position還原爲0,爲讀緩衝區作準備。
第四行:從緩衝區內讀取一個字節,position會日後移動一下,可是不會超過limit,若是超過會報錯。spa
[java] view plain copy print?.net
ByteBuffer buffer = ByteBuffer.allocate(5); 指針
System.out.println("初始化:"+buffer.position()); orm
System.out.println("初始化:"+buffer.limit()); blog
System.out.println("初始化:"+buffer.capacity()); ip
System.out.println();
buffer.put((byte)1);
System.out.println("放入1個字節:"+buffer.position());
System.out.println("放入1個字節:"+buffer.limit());
System.out.println("放入1個字節:"+buffer.capacity());
System.out.println();
buffer.flip();
System.out.println("flip以後:"+buffer.position());
System.out.println("flip以後:"+buffer.limit());
System.out.println("flip以後:"+buffer.capacity());
System.out.println();
buffer.get();
System.out.println("拿出一個字節:"+buffer.position());
System.out.println("拿出一個字節:"+buffer.limit());
System.out.println("拿出一個字節:"+buffer.capacity());
初始化:0
初始化:5
初始化:5
放入1個字節:1
放入1個字節:5
放入1個字節:5
flip以後:0
flip以後:1
flip以後:5
拿出一個字節:1
拿出一個字節:1
拿出一個字節:5