说明
io.netty.buffer.ByteBuf有标记和重置readerIndex的函数:
- markReaderIndex():标记ByteBuf当前的readerIndex。
- resetReaderIndex():重置ByteBuf当前的readerIndex到上次标记的readerIndex。
示例
package com.thb;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
public class Test {
public static void main(String[] args) {
// 创建一个ByteBuf
ByteBuf buf = Unpooled.buffer();
// 写入一个整数,占4个字节
buf.writeInt(100);
// 写入50个字节的数据
for (int i = 0; i < 50; i++) {
buf.writeByte(0x68);
}
// 标记当前的readerIndex
buf.markReaderIndex();
// 读出一个整数,读了4个字节,readerIndex增长了4
int length = buf.readInt();
System.out.println("buf.readerIndex: " + buf.readerIndex());
if (buf.readableBytes() < length) {
// 重置readerIndex到上次标记的readerIndex
buf.resetReaderIndex();
System.out.println("after resetReaderIndex, buf.readerIndex: " + buf.readerIndex());
}
}
}
运行输出:
buf.readerIndex: 4
after resetReaderIndex, buf.readerIndex: 0