buffer是固定数量的数据的容器,可以被填充和读取。
一个 buffer 主要由 position,limit,capacity 3个属性
capacity : buffer最大容量,创建时设定,不可修改
position:当前操作(读写)位置
limit: 第一个不能被读写的元素的位置,即最大可用空间.如果position=limit,继续往buffer
中存放数据,会抛越界异常
mark:标记当前位置,可以后续reset返回到当前position
几个属性关系:
0<=mark<=position<=limit<=capacity
clear方法:为写入数据做准备
flip方法,为读取该buffer做准备
rewind方法,从新设置position为0,后续可进行重复操作
compact(): 将未读取的数据拷贝到 buffer 的头部位。即将当前position数据复制到0出,position+n
出复制到n处
一个 buffer 主要由 position,limit,capacity 3个属性
capacity : buffer最大容量,创建时设定,不可修改
position:当前操作(读写)位置
limit: 第一个不能被读写的元素的位置,即最大可用空间.如果position=limit,继续往buffer
中存放数据,会抛越界异常
mark:标记当前位置,可以后续reset返回到当前position
几个属性关系:
0<=mark<=position<=limit<=capacity
clear方法:为写入数据做准备
public final Buffer clear() {
position = 0;
limit = capacity;
mark = -1;
return this;
}
flip方法,为读取该buffer做准备
public final Buffer flip() {
limit = position;//position是前面已填充数据的位置
position = 0;
mark = -1;
return this;
}
rewind方法,从新设置position为0,后续可进行重复操作
public final Buffer rewind() {
position = 0;
mark = -1;
return this;
}
compact(): 将未读取的数据拷贝到 buffer 的头部位。即将当前position数据复制到0出,position+n
出复制到n处
//allocate创建一个buffer,指定capacity,默认limit=capacity,position=0
CharBuffer buffer = CharBuffer.allocate(10);
//存入元素
buffer.put('A').put('B');
//从新设定buffer的limit为6,则该buffer最多能存储6个元素
buffer.limit(6);
buffer.put('C').put('D').put('E');
//准备读取该buffer中元素
buffer.flip();
int count = buffer.limit();//5
for(int i=0;i<count;i++){
System.out.println(buffer.get());
}
//rewind该buffer,进行第二次读取操作
buffer.rewind();
for(int i=0;i<count;i++){
System.out.println(buffer.get());
}
buffer.rewind();
while(buffer.hasRemaining()/*return position<limit*/){
System.out.println(buffer.get());
}