第一章Netty,position和limit的关系

📅 2026/6/26 19:58:50
第一章Netty,position和limit的关系
在 ByteBuffer(以及所有 NIO Buffer)中,position 和 limit 是两个核心的指针变量,它们共同定义了当前缓冲区中‌有效数据的范围‌或‌可操作的空间‌。它们之间始终遵循一个核心不变式:0≤mark≤position≤limit≤capacity以下是 position 和 limit 的具体关系及在不同模式下的含义:1. 核心定义Position(位置)‌:表示‌下一个‌要被读取或写入的元素的索引。每次执行 get() 或 put() 操作后,position 会自动加 1。它像一个“游标”,指示当前操作进行到了哪里。Limit(界限)‌:表示‌第一个不能‌被读取或写入的元素的索引。换句话说,索引从 0 到 limit - 1 的区域是当前可操作的有效区域。它像一个“围墙”,限制了 position 能移动到的最大位置,防止越界访问无效数据或超出缓冲区容量。2. 两种模式下的关系变化position 和 limit 的关系随着缓冲区在“写模式”和“读模式”之间的切换而动态变化,最典型的操作是 flip()。A. 写模式(Writing Mode)当你刚创建缓冲区或调用 clear() 后,缓冲区处于写模式。Limit‌:通常等于 capacity(缓冲区的总物理容量)。表示你最多可以写入这么多数据。Position‌:初始为 0,随着写入数据逐渐增加。关系‌:position 指向下一个待写入的位置,limit 指向缓冲区的末尾。示例‌:capacity = 10, limit = 10。写入 3 个字节后,position = 3。此时有效写入空间是索引 0, 1, 2,下一个写入位置是 3,不能超过 limit (10)。