UnpooledDirectByteBuf源码分析
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源码分析相关推荐
- Netty源码分析第5章(ByteBuf)----第5节: directArena分配缓冲区概述
Netty源码分析第5章(ByteBuf)---->第5节: directArena分配缓冲区概述 Netty源码分析第五章: ByteBuf 第五节: directArena分配缓冲区概述 上 ...
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...
- SpringBoot-web开发(二): 页面和图标定制(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...
- SpringBoot-web开发(一): 静态资源的导入(源码分析)
目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...
- Yolov3Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...
- ViewGroup的Touch事件分发(源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...
- View的Touch事件分发(二.源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
最新文章
- 【FFmpeg】使用过的命令汇总(持续更新中...)
- CNN是靠什么线索学习到深度信息的?——一个经验性探索
- 4月18日 MySQL学习
- 前端学习(1483):在vue发送网络请求
- C++ lower_bound和upper_bound的区别
- python爬虫面试自我介绍范文_走过路过不容错过,Python爬虫面试总结
- 如何隐藏scroll-Y纵向滚动条,并不影响内容滚动的方法
- 学习笔记︱深度学习以及R中并行算法的应用(GPU)
- 计算机安装硬盘后无法启动不了,电脑一键装机后无法启动 电脑一键装机后无法启动解决办法详解...
- 语法分析:自上而下分析
- 通信基站中AAU与RRU的功能和区别是什么?
- 计算机usb无法使用,Win7系统电脑USB接口无法使用解决方案
- 夜神模拟器Nox.exe支持命令行参数列表
- 1052 Linked List Sorting (25 分)-PAT甲级
- 云计算基础-云计算基础介绍整理
- nodejs和js之间有什么区别?
- 十月的尾巴,梦起航的时刻
- 2019年十大开源WEB应用防火墙点评
- AES128-CBC
- Python基于RCNN&CTC的文本识别系统(源码&部署教程)