重要属性
-
Capacity - 容量 - 初始为最大值
-
Position - 写入位置 - 初始为0
-
Limit - 读写限制 - 初始为最大值
分配内存
-
ByteBuffer#allocate(int)
分配 Java 堆内存,读写效率较低,受 GC 影响。
-
ByteBuffer#allocateDirect(int)
直接内存,读写效率高(少一次拷贝),不受 GC 影响,分配的效率低,可能造成内存泄漏。
写模式
更新 Position
-
clear()
复位 Position -> 0、Limit -> 最大值。
-
compact()
把未读完的部分向前压缩,Position -> Limit、Limit -> 最大值。
读模式
Limit 移动到 Position 处,Position 指向起始位置 0
-
flip()
Limit -> Position、Position -> 0,以 Position 为索引读取数据。
分散读取 & 集中写入
Channel#read(ByteBuffer[])
- 将数据分散读取到每个 ByteBuffer 中。
Channel#write(ByteBuffer[])
- 将数据集中写入到一个 Channel 中