/*** Netty 内存分配容器 ByteBuf*/
public class ByteBufDemo {public void doAlloc(ChannelHandlerContext ctx, UserModel userModel) {// 初始化容器内存大小,ByteBuf byteBuf = ctx.alloc().directBuffer().capacity(1024);/*** 经验表明,Bytebuf的最佳实践是在IO通信线程的读写缓冲区使用DirectByteBuf,后端业务使用HeapByteBuf*/
//        ByteBuf byteBurWriter = ctx.alloc().directBuffer().writeBytes(userModel.getProtoData().toByteArray);}public static void main(String[] args) throws Exception {//        testUnpooledHeapBuffer();
//        testUnpooledDirectBuffer();testComposite();}// 直接缓冲区public static void testUnpooledDirectBuffer() throws Exception {// 未池化的直接缓冲区ByteBuf directBuffer = Unpooled.directBuffer(100);directBuffer.writeBytes("directBUffer".getBytes());//检查 ByteBuf 是否由数组支撑。如果不是,则这是一个直接缓冲区,是数组则应该放在堆内存if (!directBuffer.hasArray()) {int length = directBuffer.readableBytes();byte[] array = new byte[length];/*** 先读取两个字节* 结果如下: [114, 101, 99, 66, 85, 102, 102, 101, 114, 0, 0]* 11*/directBuffer.readerIndex(2);/*** 将字节复制到数组* 未读取之前结果如下: [100, 105, 114, 101, 99, 66, 85, 102, 102, 101, 114]*/directBuffer.getBytes(directBuffer.readerIndex(), array);System.out.println(Arrays.toString(array));System.out.println(length);}}// 堆缓冲区public static void testUnpooledHeapBuffer() {ByteBuf heapBuf = Unpooled.copiedBuffer("heap buffer", CharsetUtil.UTF_8);if (heapBuf.hasArray()) {byte[] array = heapBuf.array();int offerset = heapBuf.arrayOffset() + heapBuf.readerIndex();int length = heapBuf.readableBytes();System.out.println(Arrays.toString(array));System.out.println(offerset);System.out.println(length);/*** 结果如下:* [104, 101, 97, 100, 32, 98, 117, 102, 102, 101, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]* 0* 11*/}}/*** 复合缓冲区* Netty 通过一个 ByteBuf 子类——CompositeByteBuf——实现了组合模式,它提供了一*  个将多个缓冲区表示为单个合并缓冲区的虚拟表示*/public static void printCompositeBuf(CompositeByteBuf compbuf) {// 可读字节数int length = compbuf.readableBytes();byte[] array = new byte[length];compbuf.getBytes(compbuf.readerIndex(), array);System.out.println("array: " + Arrays.toString(array));System.out.println("length: " + length);}public static void testComposite() {// 复合缓冲区CompositeByteBuf messageBuf = Unpooled.compositeBuffer();ByteBuf headBuf = Unpooled.directBuffer(1024);headBuf.writeBytes("head buffer".getBytes(StandardCharsets.UTF_8));
//        ByteBuf headBuf = Unpooled.copiedBuffer("head buffer", StandardCharsets.UTF_8);ByteBuf bodyBuf = Unpooled.copiedBuffer("body buffer", StandardCharsets.UTF_8);//messageBuf.addComponents(headBuf, bodyBuf);System.out.println("headBuf 可读字节数: " + headBuf.readableBytes());System.out.println("BodyBuf 可读字节数: " + bodyBuf.readableBytes());System.out.println("messgeBuf可读字节数:  " + messageBuf.readableBytes());System.out.println("remove head before -------------");printCompositeBuf(messageBuf);for (ByteBuf buf : messageBuf) {System.out.println(buf.toString(StandardCharsets.UTF_8));}// 根据数组下标删除元素messageBuf.removeComponent(0);System.out.println("remove head after-------------");printCompositeBuf(messageBuf);for (ByteBuf buf : messageBuf) {System.out.println(buf.toString(StandardCharsets.UTF_8));}/*** 结果如下:* headBuf 可读字节数: 11* BodyBuf 可读字节数: 11* messgeBuf可读字节数:  0* remove head before -------------* array: []* length: 0* head buffer* body buffer* remove head after-------------* array: []* length: 0* body buffer*/}}

待完善

ByteBuf 笔记相关推荐

  1. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  2. 《netty实战》阅读笔记(2)——Netty 的数据容器ByteBuf

    ByteBuffer 当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK NIO类库提供的java.nio.Buffer. 实际上,7种基础类型(Boolean除外)都有自己的缓冲 ...

  3. Netty学习笔记(一)

    学习圣思园Netty笔记,个人理解 2.netty宏观理解-本节内容: 1.阶段性事件驱动,一个请求分为若干阶段处理,每个阶段根据情况合理分配线程去处理,各阶段间通信采用异步事件驱动方式. 2.net ...

  4. 《Netty权威指南》笔记 —— 第二十、二十一、二十二, 二十三章

    <Netty权威指南>笔记--Netty高级特性 第20章 Netty架构剖析 Reactor通信调度层 职责链 ChannelPipeline 业务逻辑编排层 关键架构质量属性 高性能 ...

  5. 04、Netty学习笔记—(黏包半包及协议设计解析)

    文章目录 一.粘包与半包 1.1.现象分析 1.1.1.粘包.半包情况分析 1.1.2.滑动窗口.MSS限制.Nagle算法介绍 1.2.粘包.半包现象复现 1.2.1.粘包复现 1.2.2.半包复现 ...

  6. 【阅读笔记】Java游戏服务器架构实战

    [阅读笔记]Java游戏服务器架构实战 书籍链接:Java游戏服务器架构实战 作者提供的源码链接:kebukeYi / book-code 这里对书籍中比较重要的知识点(精华部分)进行摘录(总结) 文 ...

  7. Netty学习笔记 - 1 (带源码分析部分)

    2021年12月 北京 xxd 一.Netty是什么 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目. Netty 是一个异步的.基于事件驱动的网络应用 ...

  8. Dubbo笔记 ㉓ :Dubbo协议与网络传输

    文章目录 一.前言 二. Dubbo 协议 三. 编解码器的注入 1. 消费者的注入时机 2. 提供者的注入时机 四.NettyCodecAdapter 1. InternalEncoder 1.1 ...

  9. 【闪电侠学netty】第7章 数据载体ByteBuf的介绍

    [Netty]读书笔记 - 跟闪电侠学netty 1. 内容概要 1.1 总结 1.1.1 内存管理 Netty 使用的是堆外内存,需要手动释放,使用引用计数的方式管理内存,当引用计数 =0,回收By ...

最新文章

  1. R语言PCA主成分分析(Principle Component Analysis)实战2
  2. 654. Maximum Binary Tree最大二叉树
  3. 如何使用OpenCppCoverage检查单元测试的行覆盖率
  4. 如果把西游记倒过来看,这才是真正的社会
  5. 做乘法c语言,【code】C语言_实现输入的矩阵的乘法运算
  6. 混淆矩阵怎么看_201.工具篇MECE法则:透过结构看世界。
  7. CSS3 列表、表格、滤镜
  8. arcgis python 教程-ArcGIS Python 入门到精通,视频教程下载
  9. 物理频率、模拟角频率、数字角频率和归一化数字角频率个人理解
  10. java线程future_Java中多线程对运行结果怎么利用future获取
  11. paip.mysql error2003 Can''t connect to MySQL server on localhost (10061)的解决
  12. python中的chardet模块
  13. java IO流分类
  14. 数据库表文档生成工具screw (螺丝钉)
  15. python类似于countif_用Python实现一个简单的——人脸相似度对比
  16. Servlet.init() for servlet [Global] threw exception
  17. java web 怎么实现直播_java web开发直播平台可以实现但有缺陷
  18. Android Apk签名修改V1,V2,V3,V4
  19. MySQL 多表关联修改语句
  20. 专注中小企业 ERP 系统解决方案(源码JavaVue)

热门文章

  1. Linux操作系统和虚拟机VM VirtualBox的安装
  2. Python人脸识别两种方法
  3. 晶体闸流管_可控硅整流器_光电隔离
  4. Linux相关概念以及相关命令
  5. 微信H5页面兼容性解决方案
  6. 利用再生龙刻录系统及之后修复系统步骤
  7. 安全桌面软件Secure Desktop
  8. 【转载】一个人成败的关键:先有系统思维,然后才有看穿本质的能力
  9. JVM(三)GC垃圾回收以及四种GC算法
  10. 关于最近面试的通过2个offer然后被刷