这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
前言
大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。
摘要
本文主要带大家了解Buffer的常用方法。
Buffer的常用方法
-
-
intcapacity()返回缓冲区的容量大小。Bufferclear()为下次装入数据做好准备,将position设置为0,limit设置为capacityBufferflip()为取出数据做好准备,将limit设置为position,将position设置为0booleanhasRemaining()判断position和limit之间是否存在元素。abstract booleanisDirect()判断缓冲区是否为 direct 。abstract booleanisReadOnly()判断缓冲区是否是只读的。intlimit()返回此缓冲区的limit位置。Bufferlimit(int newLimit)重新设置limit的值Buffermark()设置缓冲区的标记。intposition()返回此缓冲区的position位置。Bufferposition(int newPosition)重新设置position的值intremaining()返回当前位置和limit之间的元素个数。Bufferreset()将此缓冲区的position设置为先前mark的位置。Bufferrewind()将position设置为0,并取消设置的mark
-
以上方法我们应该重点关注flip()方法和clear()方法,在我们进行数据读取时会使用。
对于Buffer的子类,还提供了两个用于存取数据的方法:put()和get()。
使用put()和get()进行数据操作时分为两种方式:相对和绝对。
相对就是不指定索引,在position位置开始读写数据,position位置会改变。绝对就是指定具体索引位置进行数据的读写,不改变position的位置。
我们通过一个具体的实例学习:
public class Test {
public static void main(String[] args) {
CharBuffer buffer = CharBuffer.allocate(10);
System.out.println("初始时position的位置:"+buffer.position());
System.out.println("初始时limit的位置:"+buffer.limit());
buffer.put('1');
putShow(1,buffer);
buffer.put('2');
putShow(2,buffer);
buffer.put('3');
putShow(3,buffer);
buffer.flip();
flipShow(buffer);
char a = buffer.get();
getShow(1,buffer,a);
char b = buffer.get();
getShow(2,buffer,b);
char c = buffer.get();
getShow(3,buffer,c);
buffer.clear();
clearShow(buffer);
char a1 = buffer.get(0);
getIndexShow(1,buffer,a1);
char a2 = buffer.get(0);
getIndexShow(2,buffer,a2);
char a3 = buffer.get(0);
getIndexShow(3,buffer,a3);
}
private static void putShow(int i, Buffer buffer){
System.out.println("加入第"+i+"个元素后position的位置:"+buffer.position()+",limit的位置:"+buffer.limit());
}
private static void getShow(int i, Buffer buffer,char c){
System.out.println("获取第"+i+"个元素"+c+"后position的位置:"+buffer.position()+",limit的位置:"+buffer.limit());
}
private static void flipShow(Buffer buffer){
System.out.println("调用flip方法后position的位置:"+buffer.position()+",limit的位置:"+buffer.limit());
}
private static void clearShow(Buffer buffer){
System.out.println("调用clear方法后position的位置:"+buffer.position()+",limit的位置:"+buffer.limit());
}
private static void getIndexShow(int i, Buffer buffer,char c){
System.out.println("使用索引获取第"+i+"个元素"+c+"后position的位置:"+buffer.position()+",limit的位置:"+buffer.limit());
}
}
图示过程如下: