ByteBuffer
NIO
Buffer 一种容器,可以写入和读取基本类型数据。
Buffer 内部一般是使用数组来实现。
Buffer 基本属性:
1.position:数组的下标,下一个读取或写入操作由此下标开始,写入或读取完成后 position会增加读取或写入数据的长度,即指向新的写入或读取位置。
2.limit :数组下标,指明该下标开始,以后的数组元素不可以读取或写入。
用途:如写入了10个数组元素,limit定为10,则读取操作不可以读取超过10个元素。
3.capacity: 数组的实际长度。可保存元素的最大个数。
4.mark: 通过调用mark()方法,使mark=当前position,即记住当前位置,以便N多操作之后,通过reset()方法使position 回到之前的位置,即position = mark
以上几个属性之间的关系:
0<=mark<=position<=limit<=capacity
Buffer 的方法:
bstract Object |
array() 返回此缓冲区的底层实现数组(可选操作)。 |
abstract int |
arrayOffset() 返回此缓冲区的底层实现数组中第一个缓冲区元素的偏移量(可选操作)。 |
int |
capacity() 返回此缓冲区的容量。 |
Buffer |
clear() 清除此缓冲区。position=0,limit=capacity,mark=-1 |
Buffer |
flip() 反转此缓冲区。limit=position,position=0,mark=-1 |
abstract boolean |
hasArray() 告知此缓冲区是否具有可访问的底层实现数组。 |
boolean |
hasRemaining() 告知在当前位置和限制之间是否有元素。 |
abstract boolean |
isDirect() 告知此缓冲区是否为直接缓冲区。 |
abstract boolean |
isReadOnly() 告知此缓冲区是否为只读缓冲区。 |
int |
limit() 返回此缓冲区的限制。 |
Buffer |
limit(int newLimit) 设置此缓冲区的限制。 |
Buffer |
mark() 在此缓冲区的位置设置标记。mark = position |
int |
position() 返回此缓冲区的位置。 |
Buffer |
position(int newPosition) 设置此缓冲区的位置。 |
int |
remaining() 返回当前位置与限制之间的元素数。limit - position |
Buffer |
reset() 将此缓冲区的位置重置为以前标记的位置。position=mark,limit不变 |
Buffer |
rewind() 为重新读取缓冲区准备。 mark=-1,position=0,limit不变 |
ByteBuffer :写入或读取 byte
CharBuffer :写入或读取 char
ShortBuffer :写入或读取short
IntBuffer :写入或读取int
LongBuffer:写入或读取Long
DoubleBuffer :写入或读取double
FloatBuffer :写入或读取Float
ByteBuffer 比较常用,其方法:
ByteBuffer 是有两种实现,
1 非直接缓冲区(使用数组实现) ByteBuffer.allocate(int capacity)
2.直接缓冲区(直接对内存操作) ByteBuffer.allocateDirect(int capacity)
static ByteBuffer |
allocate(int capacity) 分配一个新的字节缓冲区。 |
static ByteBuffer |
allocateDirect(int capacity) 分配新的直接字节缓冲区。 |
byte[] |
array() 返回实现此缓冲区的 byte 数组(可选操作)。 |
int |
arrayOffset() 返回此缓冲区中的第一个元素在缓冲区的底层实现数组中的偏移量(可选操作)。 |
abstract CharBuffer |
asCharBuffer() 创建此字节缓冲区的视图,作为 char 缓冲区。 |
abstract DoubleBuffer |
asDoubleBuffer() 创建此字节缓冲区的视图,作为 double 缓冲区。 |
abstract FloatBuffer |
asFloatBuffer() 创建此字节缓冲区的视图,作为 float 缓冲区。 |
abstract IntBuffer |
asIntBuffer() 创建此字节缓冲区的视图,作为 int 缓冲区。 |
abstract LongBuffer |
asLongBuffer() 创建此字节缓冲区的视图,作为 long 缓冲区。 |
abstract ByteBuffer |
asReadOnlyBuffer() 创建共享此缓冲区内容的新的只读字节缓冲区。 |
abstract ShortBuffer |
asShortBuffer() 创建此字节缓冲区的视图,作为 short 缓冲区。 |
abstract ByteBuffer |
compact() 压缩此缓冲区(可选操作)。 |
int |
compareTo(ByteBuffer that) 将此缓冲区与另一个缓冲区进行比较。 |
abstract ByteBuffer |
duplicate() 创建共享此缓冲区内容的新的字节缓冲区。 |
boolean |
equals(Object ob) 判断此缓冲区是否与另一个对象相同。 |
abstract byte |
get() 相对 get 方法。 |
ByteBuffer |
get(byte[] dst) 相对批量 get 方法。 |
ByteBuffer |
get(byte[] dst, int offset, int length) 相对批量 get 方法。 |
abstract byte |
get(int index) 绝对 get 方法。 |
abstract char |
get基本数据类型() 用于读取 基本数据类型 值的相对 get 方法。 |
abstract char |
get基本数据类型(int index) 用于读取 基本数据类型 值的绝对 get 方法。 |
|
|
boolean |
hasArray() 判断是否可通过一个可访问的 byte 数组实现此缓冲区。 |
int |
hashCode() 返回此缓冲区的当前哈希码。 |
abstract boolean |
isDirect() 判断此字节缓冲区是否为直接的。 |
ByteOrder |
order() 获取此缓冲区的字节顺序。 |
ByteBuffer |
order(ByteOrder bo) 修改此缓冲区的字节顺序。 |
abstract ByteBuffer |
put(byte b) 相对 put 方法(可选操作)。 |
ByteBuffer |
put(byte[] src) 相对批量 put 方法(可选操作)。 |
ByteBuffer |
put(byte[] src, int offset, int length) 相对批量 put 方法(可选操作)。 |
ByteBuffer |
put(ByteBuffer src) 相对批量 put 方法(可选操作)。 |
abstract ByteBuffer |
put(int index, byte b) 绝对 put 方法(可选操作)。 |
abstract ByteBuffer |
put基本数据类型(数据类型 value) 用来写入 数据类型 值的相对 put 方法(可选操作)。 |
abstract ByteBuffer |
put基本数据类型(int index, 数据类型 value) 用于写入 数据类型 值的绝对 put 方法(可选操作)。 |
|
|
abstract ByteBuffer |
slice() 创建新的字节缓冲区,其内容是此缓冲区内容的共享子序列。 |
String |
toString() 返回汇总了此缓冲区状态的字符串。 |
static ByteBuffer |
wrap(byte[] array) 将 byte 数组包装到缓冲区中。 |
static ByteBuffer |
wrap(byte[] array, int offset, int length) 将 byte 数组包装到缓冲区中。 |