Buffer

Buffer

描述:
Buffer类是缓冲区的实现,类似于Java中的数组,也适用于存放和获取数据的集合,但是Buffer相比于Java中的数据功能更为强大,包含一系列对数组的快捷操作
Buffer 提供了基本类型的抽象子类,这些抽象子类包含了许多实现类,但为了方便这些抽象子类提供了两种方法(xxxBuffer.allocate / xxxBuffer.wrap)可以直接创建对应的Buffer对象而不需要关心底层实现,如果有兴趣可以Debug或者阅读源码就可以很清晰的看到底层实现类是谁.
	默认使用HeapxxxBuffer 在堆中开辟空间
	ByteBuffer
	CharBuffer
	FloatBuffer
	IntBuffer
	DoubleBuffer
	ShortBuffer
	LongBuffer
核心内容:
public abstract class Buffer {
    // Invariants: mark <= position <= limit <= capacity
    /**
    * 标记
    */
    private int mark = -1;
    /**
    * 位置,下一个要被读/写的元素的索引,每次读写缓冲区数据都会进行改变为下次读写准备
    */
    private int position = 0;
    /**
    * 表示缓冲区当前的终点,不能对缓冲区超过极限的位置进行读写操作,且极限是可以修改的
    */
    private int limit;
    /**
    * 容量,即可以容纳的最大数据量,在缓冲区创建时被设定且之后不能改变
    */
    private int capacity;

    // Used only by direct buffers
    // NOTE: hoisted here for speed in JNI GetDirectBufferAddress
    long address;
API 操作
创建Buffer
//直接给定一个长度
IntBuffer buffer = IntBuffer.allocate(10);
int[] ints = {1, 2, 3, 4, 5, 6};
//给定一个数组
IntBuffer wrap1 = IntBuffer.wrap(ints);
//重载方法,给定一个数组,并截取部分
IntBuffer wrap2 = IntBuffer.wrap(ints,0,3);
写操作,IntBuffer为例 , 以下方法如果超出缓冲区长度会抛出异常 java.nio.BufferOverflowException
public abstract IntBuffer put(int i);  // 在当前position位置插入数据
public abstract IntBuffer put(int index,int i); // 在指定位置存放数据
public final IntBuffer put(int[] src); //直接存放数组中所有内容
public IntBuffer put(int[] src,int offset,int length); // 存放数据中的内容,可以指定范围 包头不包尾
public IntBuffer put(IntBuffer src); // 存放另一个缓冲区的内容
	public final Buffer position(int newPositio); // 设置缓冲区的位置
	public final int limit(); // 返回缓冲区的限制
	public final Buffer limit(int newLimit); // 设置缓冲区的限制
	public final Buffer mark(); // 在缓冲区的位置设置标记
	public final Buffer reset(); // 将缓冲区的位置重置为以前标记的位置
	public final Buffer clear(); // 清除缓冲区,即将各个标记恢复到初始状态,但是数据并没有擦除
	public final Buffer flip(); // 反转缓冲区 -- 读变写  写变读
	public final Buffer rewind(); // 重绕缓冲区
	public final int remaining(); // 返回当前位置和限制之间的元素数
	public final boolean hasRemaining(); // 判断当前位置和限制之间是否有元素
	public abstract boolean isReadOnly(); // 判断缓冲区是否是只读
	public abstract boolean hasArray(); // 判断缓冲区是否具有可访问的底层实现数组
	public abstract Object array(); //返回缓冲器的底层实现数组
	public abstract int arrayOffset(); // 返回缓冲区的底层实现数组中第一个缓冲区元素的偏移量
	public abstract boolean isDirect(); // 判断是否为直接缓冲区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值