进行数据传输 ,需要使用缓冲区。ByteBuf是一个Byte数组的缓冲区,通过两个指针来协助读写操作。以下ri标识readIndex wi标识writeIndex。

  1. 1.1 工作原理

工作原理

图示原理

刚初始化的ByteBuf

写入N个字节后

读取M个字节 M < N

调用discardReadBytes 操作之后的

调用clear之后

分析如何动态扩展

ByteBuf的write 操作进行了封装,进行剩余空间的校验,如果可用缓冲区不足,会自动进行扩展。

功能介绍

顺序读



顺序写


readIndex writeIndex

ri和wi将ByteBuf缓冲区分割为三个区域

可以调用discardReadBytes 来重用空间 节省内存,但是会发生数组复制,频繁调用可能会产生性能下降

Readable bytes 和 writeable bytes

可读空间是实际存贮的区域 可写字段是尚未被使用可以填充的空间

Mark / Reset

对于缓冲区的操作 ,由于某种原因需要对之前的操作进行回滚,调用mark会将当前的指针备份到mark变量中,调用reset的时候,重新将指针至于mark’的位置

ByteBuf 详解相关推荐

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

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

  2. netty系列之:netty中的ByteBuf详解

    文章目录 简介 ByteBuf详解 创建一个Buff 随机访问Buff 序列读写 搜索 其他衍生buffer方法 和现有JDK类型的转换 总结 简介 netty中用于进行信息承载和交流的类叫做Byte ...

  3. 消息 ByteBuf 详解

    Netty提供了ByteBuf来替代Java NIO的ByteBuffer缓冲区,以操纵内存缓冲区. 与Java NIO的ByteBuffer相比,ByteBuf的优势如下: · Pooling(池化 ...

  4. Netty 教程 – ByteBuf详解

    ByteBuffer存在的问题 ByteBuffer是JDK1.4中提供的java.nio.Buffer, 在内存中预留指定大小的存储空间来存放临时数据,其他Buffer的子类有:CharBuffer ...

  5. netty源码之ByteBuf详解

    一.背景简介 ByteBuf,顾名思义,就是字节缓冲区,是Netty中非常重要的一个组件.熟悉jdk NIO的同学应该知道ByteBuffer,正是因为jdk原生ByteBuffer使用比较复杂,某些 ...

  6. Netty之ByteBuf详解

    1. ByteBuf的创建 在Netty中,有一个比较常见的对象ByteBuf,它其实等同于Java Nio中的ByteBuffer,但是ByteBuf对Nio中的ByteBuffer的功能做了很作增 ...

  7. 非阻塞网络编程详解------IO模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  8. Netty详解(五):Netty TCP粘包 拆包

    1. 概述 无论是服务端还是客户端,我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制.下面我们来通过Netty来详解TCP底层的粘包和拆包机制. 2. TCP底层的粘包和拆包机制 TC ...

  9. netty系列之:netty中的Channel详解

    文章目录 简介 Channel详解 异步IO和ChannelFuture Channel的层级结构 释放资源 事件处理 总结 简介 Channel是连接ByteBuf和Event的桥梁,netty中的 ...

最新文章

  1. 15-11-23:system指令
  2. Python 之 pip拒绝访问
  3. Ackerman 函数的解法
  4. 2.羽翼sqlmap学习笔记之MySQL注入
  5. python3 socketserver_Python3中的SocketServer
  6. javaIo流实际应用
  7. linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法
  8. C语言实现音乐播放器(Linux madplay)
  9. 创建数据库python: can‘t open file ‘manage.py‘: [Errno 2] No such file or directory报错
  10. 深入理解MySQL索引设计和优化原则
  11. struts2中struts.xml配置文件详解
  12. 金蝶k3 wise版本安装流程
  13. 有监督 VS 无监督
  14. 网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符
  15. 微信公众平台开发(34)微相册
  16. echarts 2.0 macarons主题安装
  17. c# 第32节 类的继承
  18. opencv中的split函数
  19. linux下查看gaussian结构,察看Gaussian全部IOp的方法
  20. 智能家居2.0 - Matter 1.0 标准和受益者

热门文章

  1. 第四次机考(2019)E. 教学质量评估
  2. gcc的-l和-L是什么含义
  3. 外观设计专利侵权怎么认定
  4. 系统 win 10 专业版 下载地址
  5. QT中使用moveToThread
  6. rebotframework与BuiltIn
  7. 【Golang源码阅读】builtin/builtin.go
  8. 【Java愚公】idea自动补全变量名称和属性名称的快捷键
  9. php 舞伴配对,舞伴配对
  10. 最详细的Windows下安装Python和pycharm破解教程,不会电脑的都能安装成功!