netty的ByteBuf的演示Demo

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
	}

猜你喜欢

转载自blog.csdn.net/shuixiou1/article/details/115030413