欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

netty案例,netty4.1源码分析篇四《ByteBuf的数据结构在使用方式中的剖析》

最编程 2024-01-14 12:52:34
...
// 62 75 67 73 74 61 63 6B B3 E6 B6 B4 D5 BB public static void main(String[] args) throws UnsupportedEncodingException { // 1.创建一个非池化的ByteBuf,大小为14个字节 ByteBuf buffer = Unpooled.buffer(14); System.out.println("1.创建一个非池化的ByteBuf,大小为14个字节"); System.out.println("ByteBuf空间大小:" + buffer.capacity()); // 2.写入3个字节 buffer.writeByte(62); buffer.writeByte(75); buffer.writeByte(67); System.out.println("\r\n2.写入3个字节"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); // 3.写入一段字节 byte[] bytes = {73, 74, 61, 63, 0x6B}; buffer.writeBytes(bytes); System.out.println("\r\n3.写入一段字节"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); // 4.读取全部内容 byte[] allBytes = new byte[buffer.readableBytes()]; buffer.readBytes(allBytes); System.out.println("\r\n4.读取全部内容"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); System.out.println("读取全部内容:" + Arrays.toString(allBytes)); // 5.重置指针位置 buffer.resetReaderIndex(); System.out.println("\r\n5.重置指针位置"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); // 6.读取3个字节 byte b0 = buffer.readByte(); byte b1 = buffer.readByte(); byte b2 = buffer.readByte(); System.out.println("\r\n6.读取3个字节"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); System.out.println("读取3个字节:" + Arrays.toString(new byte[]{b0, b1, b2})); // 7.读取一段字节 ByteBuf byteBuf = buffer.readBytes(5); byte[] dst = new byte[5]; byteBuf.readBytes(dst); System.out.println("\r\n7.读取一段字节"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); System.out.println("读取一段字节:" + Arrays.toString(dst)); // 8.丢弃已读内容 buffer.discardReadBytes(); System.out.println("\r\n8.丢弃已读内容"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); // 9.清空指针位置 buffer.clear(); System.out.println("\r\n9.清空指针位置"); System.out.println("readerIndex位置:" + buffer.readerIndex()); System.out.println("writerIndex位置:" + buffer.writerIndex()); // 10.ByteBuf中还有很多其他方法;拷贝、标记、跳过字节,多用于自定义解码器进行半包粘包处理 }