Netty第一章NIO,ByteBuffer 中,limit解释 📅 2026/6/25 19:25:19 在 ByteBuffer 中limit 指的是当前缓冲区中可读或可写数据的边界索引。它定义了你可以操作的数据范围上限。具体来说limit 的含义取决于缓冲区当前处于“写模式”还是“读模式”1. 核心定义位置关系始终满足 0 position limit capacity。作用它限制了 position 指针能移动到的最大位置。当你调用 get() 或 put() relative相对方法时如果 position 达到 limit就会抛出 BufferUnderflowException 或 BufferOverflowException。2. 不同场景下的具体含义A. 写模式刚创建或 clear 后含义表示最多还能写入多少数据。值通常等于 capacity缓冲区的总容量。示例如果 capacity 是 1024limit 也是 1024。你可以从 position0 一直写到 position1023。B. 读模式flip 后含义表示还有多少数据可供读取。值等于之前写入数据后的 position 值。示例如果你写入了 100 个字节此时 position100。调用 flip() 后limit 被设置为 100。这意味着你只能读取索引 0 到 99 的数据防止读到未初始化的垃圾数据。3. 常见操作对 Limit 的影响操作对 Limit 的影响说明allocate(cap)limit capacity初始化时限制等于总容量准备写入。flip()limit old position关键操作将限制设为刚才写入数据的末尾准备读取有效数据。clear()limit capacity重置限制为总容量准备重新写入覆盖旧数据。rewind()不变仅重置 position 为 0limit 保持原样用于重复读取。compact()limit capacity压缩后将限制重置为总容量准备在剩余空间继续写入。**总结**limit 是一个安全边界它告诉缓冲区“在这个索引之前的数据是有效的可读”或者“在这个索引之前的空间是可用的可写”。在 position(0) 这种手动重置指针的操作中确保 limit 设置正确尤为重要否则可能会读到无效数据。