说明

1.Netty提供一个专门用来操作缓冲区(即Netty的数据容器)的工具类
2.常用方法
image.png
Unpooled获取Netty的数据容器ByteBuf
三个重要属性如下图
image.png

举例一
  1. public class NettyByteBuf01 {
  2. public static void main(String[] args) {
  3. //创建一个ByteBuf
  4. /*
  5. 1.创建对象,该对象会包含一个数组,byte[10]
  6. 2.在Netty的buffer中,不需要使用flip进行读写反转
  7. 底层维护了readerIndex(记录下一个读) 和 writerIndex(记录下一个写)
  8. 将buffer分成三个区域 :
  9. 0 -> readerIndex--已经读取的区域
  10. readerIndex -> writerIndex --可读区域
  11. writerIndex -> capacity(数组大小) -->可写区域
  12. */
  13. ByteBuf buffer = Unpooled.buffer(10);
  14. for (int i = 0; i < 10; i++) {
  15. buffer.writeByte(i); //writerIndex递增
  16. }
  17. System.out.println("容量大小为"+buffer.capacity());
  18. for (int i = 0; i < buffer.capacity(); i++) {
  19. System.out.println(buffer.getByte(i));
  20. }
  21. for (int i = 0; i < buffer.capacity(); i++) {
  22. System.out.println(buffer.readByte()); //readerIndex递增
  23. }
  24. }
  25. }

举例二
  1. public class NettyByteBuf02 {
  2. public static void main(String[] args) {
  3. //创建ByteBuf
  4. ByteBuf buf = Unpooled.copiedBuffer("HelloWorld嘿嘿", StandardCharsets.UTF_8);
  5. //使用相关的API
  6. if (buf.hasArray()) { //是否分配数组
  7. byte[] content = buf.array();
  8. System.out.println(new String(content, StandardCharsets.UTF_8));
  9. System.out.println("byteBuf=" + buf); //真实类型为一个内部类
  10. //byteBuf=UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 16, cap: 36)
  11. System.out.println(buf.arrayOffset()); // 偏移量
  12. System.out.println(buf.readerIndex());
  13. System.out.println(buf.writerIndex());
  14. System.out.println(buf.capacity()); //容量
  15. int len = buf.readableBytes();//可读的字节数
  16. System.out.println(len);
  17. //使用for循环取出
  18. for (int i = 0; i < len; i++) {
  19. System.out.print((char) buf.getByte(i));
  20. }
  21. System.out.println(buf.getCharSequence(0,4,StandardCharsets.UTF_8));//读取某一段,从index读len长度
  22. }
  23. }
  24. }