java nio中buffer的position、limit和capacity必须满足0 ≤ position ≤ limit ≤ capacity,该不等式是状态合法性的根本判据;capacity固定不变,limit标识有效数据右边界[position, limit),position为当前操作指针;flip()将写转读时设limit=position、position=0,clear()恢复写模式时设position=0、limit=capacity。

Java NIO中Buffer的position、limit和capacity之间存在严格且不可违背的数学约束关系:
基础不等式关系
三者始终满足:
- 0 ≤ position ≤ limit ≤ capacity
这个不等式是Buffer内部状态合法性的根本判据。任何违反该关系的操作(如手动设置position > limit)都会导致IllegalArgumentException。
各属性的含义与边界逻辑
capacity是固定值,代表缓冲区底层数组可容纳元素的最大数量,初始化后永不改变。
limit是动态边界:它标识“第一个不可读/不可写的索引位置”,即有效数据范围是[position, limit)(左闭右开区间)。
position是当前操作指针:写入时指向下一个待填充位置;读取时指向下一个待获取位置。
模式切换时的关键变化
从写模式转为读模式必须调用flip(),其本质是重置边界:
-
limit = position(把读取上限设为已写入的数据量) -
position = 0(从头开始读)
此时有效读取区间变为[0, limit),而limit ≤ capacity依然成立。
恢复写模式的clear()操作
调用clear()会还原为初始写状态:
position = 0limit = capacity-
capacity不变
于是再次满足0 = position ≤ limit = capacity。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











