1.1成员变量

private final ByteBufAllocator alloc;

private ByteBuffer buffer;
private ByteBuffer tmpNioBuf;
private int capacity;
private boolean doNotFree;

1.2构造方法

 protected UnpooledDirectByteBuf(ByteBufAllocator alloc, int initialCapacity, int maxCapacity) {super(maxCapacity);if (alloc == null) {throw new NullPointerException("alloc");}if (initialCapacity < 0) {throw new IllegalArgumentException("initialCapacity: " + initialCapacity);}if (maxCapacity < 0) {throw new IllegalArgumentException("maxCapacity: " + maxCapacity);}if (initialCapacity > maxCapacity) {throw new IllegalArgumentException(String.format("initialCapacity(%d) > maxCapacity(%d)", initialCapacity, maxCapacity));}this.alloc = alloc;setByteBuffer(ByteBuffer.allocateDirect(initialCapacity));}

2.动态扩展缓存


联系一下上文的UploadHeapByteBuf的实现,其实发现好简单的

3.写操作

 public ByteBuf setBytes(int index, ByteBuf src, int srcIndex, int length) {checkSrcIndex(index, length, srcIndex, src.capacity());if (src.nioBufferCount() > 0) {for (ByteBuffer bb: src.nioBuffers(srcIndex, length)) {int bbLen = bb.remaining();setBytes(index, bb);index += bbLen;}} else {src.getBytes(srcIndex, this, index, length);}return this;}
public ByteBuf setBytes(int index, ByteBuffer src) {ensureAccessible();ByteBuffer tmpBuf = internalNioBuffer();if (src == tmpBuf) {src = src.duplicate();}tmpBuf.clear().position(index).limit(index + src.remaining());tmpBuf.put(src);return this;}

和Heap进行对比,非常容易发现,heap因为它就是堆,直接对array进行读写操作就行了,和内存的直接对索引操作形成了对比。
读写操作差不多,不再赘述。

UnpooledDirectByteBuf源码分析相关推荐

  1. Netty源码分析第5章(ByteBuf)----第5节: directArena分配缓冲区概述

    Netty源码分析第5章(ByteBuf)---->第5节: directArena分配缓冲区概述 Netty源码分析第五章: ByteBuf 第五节: directArena分配缓冲区概述 上 ...

  2. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  3. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  4. SpringBoot-web开发(二): 页面和图标定制(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...

  5. SpringBoot-web开发(一): 静态资源的导入(源码分析)

    目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...

  6. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

  7. ViewGroup的Touch事件分发(源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...

  8. View的Touch事件分发(二.源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...

  9. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码   String res ...

最新文章

  1. 【FFmpeg】使用过的命令汇总(持续更新中...)
  2. CNN是靠什么线索学习到深度信息的?——一个经验性探索
  3. 4月18日 MySQL学习
  4. 前端学习(1483):在vue发送网络请求
  5. C++ lower_bound和upper_bound的区别
  6. python爬虫面试自我介绍范文_走过路过不容错过,Python爬虫面试总结
  7. 如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法
  8. 学习笔记︱深度学习以及R中并行算法的应用(GPU)
  9. 计算机安装硬盘后无法启动不了,电脑一键装机后无法启动 电脑一键装机后无法启动解决办法详解...
  10. 语法分析:自上而下分析
  11. 通信基站中AAU与RRU的功能和区别是什么?
  12. 计算机usb无法使用,Win7系统电脑USB接口无法使用解决方案
  13. 夜神模拟器Nox.exe支持命令行参数列表
  14. 1052 Linked List Sorting (25 分)-PAT甲级
  15. 云计算基础-云计算基础介绍整理
  16. nodejs和js之间有什么区别?
  17. 十月的尾巴,梦起航的时刻
  18. 2019年十大开源WEB应用防火墙点评
  19. AES128-CBC
  20. Python基于RCNN&CTC的文本识别系统(源码&部署教程)

热门文章

  1. 【Boost】boost库中智能指针概述
  2. C++ 私有成员变量的理解
  3. chromium net库设计
  4. Kafka 孕育开源 KarelDB
  5. Kafka科普系列 | 什么是LW和logStartOffset?
  6. 多线程小抄集(新编三)
  7. 设计模式:命令模式(Command)
  8. 青蛙跳台(含变种)及汉诺塔递归,母牛生小牛
  9. 关于WebRTC发展的担忧和思考
  10. 【免费报名】与阿里云一同探索视频云的新技术与新场景