ByteBuffer是怎么构成的,如何使用?

ByteBuffer通常用于Java原生NIO操作中,对Channel进行读取或者写入,其中封装了一些操作byte数组的方法,还是很实用的。

ByteBuffer的几个基本属性:

  • position:表示进行下一个读写操作的下标位置

  • limit:表示进行读写操作时的结束位置;

  • capacity:表示存储的容量

  • mark: 对数据进行标记

初始化:对ByteBuffer进行初始化,可以使用静态方法wrap(byte[] data)封装数组,也可以通过另一个静态方法allocate(int size)初始化指定长度的ByteBuffer。

初始状态position:0,limit:值为最大长度,capacity:值为最大长度

bytebuffer-init.png

数据写入(或读取):每写入(或读取)一个值,position加一(图中是写入两个数据之后的位置)。

bytebuffer-write.png

准备读取(或写入):使用flip()方法翻转准备数据读取(或写入),进行读取(或写入)时,不能超过limit限制,读超出限制报错BufferUnderflowException(写超出限制报错BufferOverflowException

bytebuffer-flip.png

清除数据:回到初始状态可以调用clear()方法,但是数据并不会删除,当写入时会直接覆盖对应位置的值。

bytebuffer-clear.png

标记位置:当需要进行标记时,可以使用mark()方法,即mark=position;进行读取后,可调用reset()方法直接回到mark标记的位置,即position=mark

你可能感兴趣的:(ByteBuffer是怎么构成的,如何使用?)