Buffer 缓冲读写数据,内存中

ByteBuffer使用最多,其中有比较重要的概念和方法。

  • capacity(容量):Buffer的最大数据容量,创建时设置,不可改变
  • limit(限制):第一个不应该读取或写入的索引
  • position(位置):下一个要读取或写入的索引
  • mark(标记):一个备忘位置,通过mark()标记,reset()返回

Buffer的实现类

  • ByteBuffer
    • mappedByteBuffer
    • DirectByteBuffer
    • HeapByteBuffer
  • ShortBuffer
  • IntBuffer
  • LongBuffer
  • FloatBuffer
  • DoubleBuffer
  • CharBuffer

模式切换

假设buffer的capacity(容量)为10.

初始状态下

position=0    下一个写入位置
limit=10      可以写入最大位置
capacity=10   总容量
mark = -1     没有标记,标记用于拷贝之类的功能
写模式

可以通过put((byte)'A');方法写入一个字符。这时候

position=1 写入了一个指向1这个下标
limit=10 还能写9个
capacity = 10
mark = -1
读模式

执行flip()方法操作,将其他模式切换成读模式

limit = position;    // 将limit设为当前position(3)
position = 0;        // 将position重置为0
mark = -1;           // 清除标记
结果:
position = 0    ✓ 下一个读取位置
limit    = 1    ✓ 只能读到position=3的位置(之前写入的数据量)
capacity = 10   ✓ 总容量不变