NettyのByteBufのデモ
1。概要
* Nettyの内部データ構造はバイトであり、readIndexフィールドとwriteIndexフィールドがあり、読み取りと書き込みの位置を示します
* [破棄可能|読み取り可能|書き込み可能]
* [readIndexwriteIndex容量]
2.共通API
* ByteBuf buffer = Unpooled.buffer(20)初期容量のバフを作成します
* in.readerIndex()現在の読み取りポインターを取得します
* in.writerIndex()現在の書き込みポインターを取得します
* in.markReaderIndex()マークを付けますシングル読み取りポインタ
* in.readByte()バイトの読み取り
* in.resetReaderIndex()現在の読み取りポインタのリセット
* in.readableBytes()読み取り可能数
* in.readBytes(byte [])バイト配列データへの読み取り
* writeByte(data)データの書き込み
* readBytes(size)データを新しいバイトに読み取ります
3、デモ
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
}