Netty的ByteBuf的演示Demo
1、概述
* Netty内部数据结构是一个byte,其中有一个readIndex字段,和一个writeIndex字段,标记读的位置和写的位置
* [ discardable | readable | writeable ]
* [ readIndex writeIndex capacity]
2、常用API
* ByteBuf buffer = Unpooled.buffer(20) 创建一个初始容量的buff
* in.readerIndex() 获取当前读指针
* in.writerIndex() 获取当前写指针
* in.markReaderIndex() 标记单前读指针
* in.readByte() 读取一个字节
* in.resetReaderIndex() 重置当前读指针
* in.readableBytes() 可读数量
* in.readBytes(byte[]) 读到byte数组数据中
* writeByte(data) 写数据
* readBytes(size) 读数据写入新的byte中
3 、demo
public static void main(String[] args) {
ByteBuf buffer = Unpooled.buffer(20); // 创建一个空的byteBuf
System.out.println("初始容量" + buffer.capacity()); // 20
buffer.writeByte(55);
buffer.writeByte(44);
buffer.writeByte(33);
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 0
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 3
byte[] bytes = {73, 74, 61, 63};
buffer.writeBytes(bytes);
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 0
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 7
byte[] allBytes = new byte[buffer.readableBytes()];
buffer.readBytes(allBytes);
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 7
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 7
buffer.resetReaderIndex();
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 0
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 7
byte b0 = buffer.readByte();
byte b1 = buffer.readByte();
byte b2 = buffer.readByte();
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 3
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 7
buffer= buffer.readBytes(4); // 读4个,写入一个新的buffer
byte[] dst = new byte[4];
buffer.readBytes(dst);
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 4
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 4
buffer.resetReaderIndex();
System.out.println("初始readerIndex位置:" + buffer.readerIndex()); // 0
System.out.println("初始writerIndex位置:" + buffer.writerIndex()); // 4
buffer.markReaderIndex();
buffer.readInt();
System.out.println("读int后readerIndex位置:" + buffer.readerIndex()); // 4
System.out.println("读int后writerIndex位置:" + buffer.writerIndex()); // 4
buffer.resetReaderIndex();
System.out.println("重置后readerIndex位置:" + buffer.readerIndex()); // 0
System.out.println("重置后writerIndex位置:" + buffer.writerIndex()); // 4
buffer.clear();
System.out.println("readerIndex位置:" + buffer.readerIndex()); // 0
System.out.println("writerIndex位置:" + buffer.writerIndex()); // 0
}