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 比较常用,其方法:

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