ByteBuffer的原理
- 1. ByteBuffer的原理
- 1.1 ByteBuffer的重要参数(其实是来自父类Buffer)
- 1.2 图示说明
- 2. 补充说明
1. ByteBuffer的原理
1.1 ByteBuffer的重要参数(其实是来自父类Buffer)
private int mark = -1; // 标记位置
private int position = 0; // 当前位置
private int limit; // 限制位置
private int capacity; // 容量
1.2 图示说明
- buffer底层维护一个数组,使用allocate(10),相当于分配到长度为10的数组:
此时buffer是写入模式,只能写数据,不能从中读数据。 - 每次channel从文件中读取一个字节,并且存入buffer中,position就向后移动一位:
- 使用flip()方法后,表示调整buffer为读模式,此时position和limit的位置会移动:
- 读完4个字节后:
- 调用clear()方法后,position和limit会恢复到初始的位置,此时buffer被调整为写模式。
只不过buffer中的数据并没有清除,只是写数据时可以覆盖写。
2. 补充说明
如果数据没有读完,就想切换到写模式,可以调用compact()方法;
比如:只读取了两个数据:
调用compact(),几个指针对应变化:
此时未读的数据,会移动到前面。