缓冲区
缓冲区就是存储数据的区域,在java中就是数组,为了操作不同数据类型,java提供了不同类型的缓冲区,除布尔外其他基本类型都有(这次因为布尔是1bit,IO中都是按字节传输的没必要在提供一个缓存区)
主要方法:
- put()将数据写入缓存区
- get()从缓冲区读数据
- flip()可以实现读写模式的切换
- static allocate(int num)获取指定容量大小的缓存区
主要属性 - capacity 缓存区最大容量
- limit 缓冲区可以操作数据的大小
- position正在操作的下标位置
- mark:标记位置,调用reset方法可以指定position到mark的位置
简单例子测试代码:
public static void main(String[] args) {
//分配内存为11的整型缓存区
IntBuffer buffer=IntBuffer.allocate(11);
//往buffer里写2个整型数据
for(int i=0;i<2;i++){
int n=new SecureRandom().nextInt(101); //SecureRandom西Q而润等
buffer.put(n);
}
//将Buffer从写模式切换到读模式
/* 缓存区有三个主要属性:
1、缓冲区最大容量capacity
2、最大可读写量limit,
3、前指针位置position,
4、标记位置mark(当于标记个位置,到时候调用reset()方法将当前位置指定为mark)
源码上看,flip相当于重置,设置limit=当前位置(经过上面循环后当前位置为2))
设置position=0,mark=-1(相)
*/
buffer.flip();
//输出position,limit,mark三个属性的指
System.out.println("position:"+buffer.position()+",limit="+buffer.limit()+",capacity="+buffer.capacity());
//遍历buffer缓存区 hasRemaining判断position是否小于limit,即是否读到最大可读量
while(buffer.hasRemaining()){
System.out.println("缓存区取出第"+buffer.position()+"个数据:"+buffer.get());
}
//再次输出三个属性
System.out.println("position:"+buffer.position()+",limit="+buffer.limit()+",capacity="+buffer.capacity());
}
测试结果: