ByteBuffer的原理
- [1. ByteBuffer的原理](#1. ByteBuffer的原理)
-
- [1.1 ByteBuffer的重要参数(其实是来自父类Buffer)](#1.1 ByteBuffer的重要参数(其实是来自父类Buffer))
- [1.2 图示说明](#1.2 图示说明)
- [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(),几个指针对应变化:
此时未读的数据,会移动到前面。
