buffer.filp() //切换到读模式
buffer.hasRemaining() //是否还有剩余数据
buffer.get() //读取数据
buffer.clear()//切换到写模式
buffer.compact() //切换到读模式
buffer.rewind() //将 position 设置为 0,为重新读取数据做准备,不影响 limit,不会修改数据
三个指针:
-
capacity
-
position
-
limit
一开始:
写模式下,position是写入的位置,limit是容量:
filp动作发生后,position切换为初始读位置,limit切换为读取限制:
读取完后:
然后clear后:
compact方法
把未读完的部分向前压缩,然后切换至写模式
rewind:
1.初始时 position 和 limit 都指向缓冲区的起始位置:
ByteBuffer: [ ][ ][ ][ ][ ][ ][ ][ ]
↑
position = 0, limit = 8
2.向缓冲区中写入了 5 个字节的数据,position 会向前移动到写入数据后的位置
ByteBuffer: [H][e][l][l][o][ ][ ][ ]
↑
position = 5, limit = 8
3.使用 rewind() 方法,position 会被重置回到缓冲区的起始位置
ByteBuffer: [H][e][l][l][o][ ][ ][ ]
↑
position = 0, limit = 8