更新时间:2023-02-14 来源:黑马程序员 浏览量:
从结构上来说,Buffer类似于一个数组,它可以保存多个类型相同的数据。从类型上来说,Buffer 是一个抽象类,其子类有 ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer 和 ShortBuffer,这些子类中最常用的是 ByteBuffer 和CharBuffer,其他则使用较少。
Buffer类的子类中并没有提供构造方法,因此不能通过构造方法来创建对象。要想创建Buffer 对象,通常会通过子类中的 static XxxBuffer
allocate(int capacity)方法来实现,其中Xxx表示不同的数据类型,而 capacity
表示容量,此方法的含义是创建一个容量为capacity的XxxBuffer对象。例如创建一个容量为6的CharBuffer对象的语句如下:
CharBuffer buffer =CharBuffer,allocate(6);
在学习 Buffer的使用之前,需要对 Buffer中的三个重要概念有所理解,这三个概念分别是 capacity(容量) limit(界限)和position(位置),其含义如下。Ocapacity(容量):缓冲区的容量表示该Buffer的最大数据容量,即最多可以存储多少数据。缓冲区的容量值不能为负数,也不能够改变。
limit(界限):表示Buffer 容器中不可被读取的区域的第一个索引,即位于Buffer容器中索引为0到limit之间的区域都可以进行读取操作。缓冲区的 limit 值从不为负,也从不大于其容量。
position(位置):用于指定下一个可以被读写的缓冲区位置索引。新创建的
Buffe对象,position的默认值为0,每进行一次读取或写人操作position的值都会自动向后移动一步。如果向 Buffer
缓冲区中执行8次写人操作,那么position的值为8,即指向 Buffer中的第9个元素的索引位置。在 Buffer类中,定义了很多方法,其常见方法如表所示:
除上表中的方法外,Buffer 的所有子类中都额外提供了 put()和 get()方法用于向hffer 中放人数据和取出数据。在使用 put()和 get()方法放入和取出数据时,Buffer 既支持单个数据的访问,也支持批量数据的访问。