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 数组包装到缓冲区中。 |