Netty框架:ByteBuf空间不够时自动扩充空间

news2024/11/20 12:37:04

说明

使用Netty的ByteBuf,空间不够时可以自动扩充。扩充时,不是一个字节一个字节的扩充,而是扩充一段空间。对于不同的ByteBufAllocator实现,每次扩充的空间大小也不相同。

代码举例

使用Unpooled分配ByteBuf

下面这段代码,使用Unpooled来分配ByteBuf,但底层使用的是UnpooledByteBufAllocator实现来分配ByteBuf。初始化的时候设置ByteBuf的容量为5个字节,在填充时,填充了6个字节的内容,导致ByteBuf自动扩充空间:

package com.thb;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.Unpooled;

public class Test {

	public static void main(String[] args) {		
		ByteBuf buf = Unpooled.buffer(5);		
		//ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(5);
		System.out.println("the actual ButeBuf allocator: " + buf.alloc());
		
		System.out.println("ByteBuf's initial capcacity: " + buf.capacity());
		
		for (int i = 0; i < 6; i++) {
			buf.writeByte(0x68);
		}
		
		System.out.println("after expanding, ByteBuf's capacity: " + buf.capacity());		
	}

}

运行输出:
在这里插入图片描述
从上面的输出可以发现,底层调用的是UnpooledByteBufAllocator(directByDefault: true)来分配ByteBuf,尽管只填充了6个字节的内容,但因为空间不够,自动扩充到了64个字节的空间。

使用ByteBufAllocator.DEFAULT来分配ByteBuf

下面这段代码,使用ByteBufAllocator.DEFAULT来分配ByteBuf,但底层使用的是PooledByteBufAllocator(directByDefault: true)实现来分配ByteBuf。初始化的时候设置ByteBuf的容量为5个字节,在填充时,填充了6个字节的内容,导致ByteBuf自动扩充空间:

package com.thb;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.Unpooled;

public class Test {

	public static void main(String[] args) {		
		//ByteBuf buf = Unpooled.buffer(5);		
		ByteBuf buf = ByteBufAllocator.DEFAULT.buffer(5);
		System.out.println("the actual ButeBuf allocator: " + buf.alloc());
		
		System.out.println("ByteBuf's initial capcacity: " + buf.capacity());
		
		for (int i = 0; i < 6; i++) {
			buf.writeByte(0x68);
		}
		
		System.out.println("after expanding, ByteBuf's capacity: " + buf.capacity());		
	}

}

运行输出:
在这里插入图片描述
从上面的输出可以发现,底层调用的是PooledByteBufAllocator(directByDefault: true)来分配ByteBuf,尽管只填充了6个字节的内容,但因为空间不够,自动扩充到了16个字节的空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/830416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构 | 搜索和排序——搜索

目录 一、顺序搜索 二、分析顺序搜索算法 三、二分搜索 四、分析二分搜索算法 五、散列 5.1 散列函数 5.2 处理冲突 5.3 实现映射抽象数据类型 搜索是指从元素集合中找到某个特定元素的算法过程。搜索过程通常返回True或False&#xff0c;分别表示元素是否存在。有时&a…

快速WordPress个人博客并内网穿透发布到互联网

快速WordPress个人博客并内网穿透发布到互联网 文章目录 快速WordPress个人博客并内网穿透发布到互联网 我们能够通过cpolar完整的搭建起一个属于自己的网站&#xff0c;并且通过cpolar建立的数据隧道&#xff0c;从而让我们存放在本地电脑上的网站&#xff0c;能够为公众互联网…

Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132077288 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

阿里云平台注册及基础使用

首先进入阿里云官网&#xff1a; 阿里云-计算&#xff0c;为了无法计算的价值 点击右上角“登录/注册”&#xff0c;如果没有阿里云账号则需要注册。 注册界面&#xff1a; 注册完成后需要开通物联网平台公共实例&#xff1a; 注册成功后的登录&#xff1a; 同样点击右上角的…

改进的智能优化算法定性分析:探索与开发分析(Analysis of the exploration and exploitation)

目录 一、改进的智能优化算法探索与开发分析 二、GWO1与GWO探索与开发分析运行结果 三、GWO1与GWO探索与开发实验对比分析 四、代码获取 一、改进的智能优化算法探索与开发分析 智能优化算法旨在将搜索过程分为两个阶段&#xff1a;探索和开发。平衡这两个阶段对于增强算法…

智能化RFID耳机装配系统:提升效率、精准追踪与优化管理

智能化RFID耳机装配系统&#xff1a;提升效率、精准追踪与优化管理 在当今的智能化时代&#xff0c;无线射频识别技术&#xff08;RFID&#xff09;被广泛应用于各个行业。本文将介绍一种基于RFID技术的智能耳机装配案例&#xff0c;通过RFID技术实现耳机装配过程的自动化控制…

ffmpeg.c源码与函数关系分析

介绍 FFmpeg 是一个可以处理音视频的软件&#xff0c;功能非常强大&#xff0c;主要包括&#xff0c;编解码转换&#xff0c;封装格式转换&#xff0c;滤镜特效。FFmpeg支持各种网络协议&#xff0c;支持 RTMP &#xff0c;RTSP&#xff0c;HLS 等高层协议的推拉流&#xff0c…

关于前后端分离

关于前后端分离 接下来&#xff0c;你将进入 前后端分离项目开发 模块。 这也是企业中比较常见的开发模式。 疑问&#xff1a; 什么是前后端分离&#xff1f;与之前的开发模式有什么区别&#xff1f;企业为什么要用前后端分离&#xff1f; 1. 什么是前后端分离&#xff1f;…

把网站改为HTTPS访问方法

HTTPS是使用TSL/SSL加密超文本传输协议的扩展&#xff0c;用于跨网络的安全传输。网站更改为HTTPS&#xff0c;直接在网站形象上可以得到提升&#xff0c;更重要的是您的网站肯定会在排名和提升方面受益。机密信息的交换需要受到保护&#xff0c;以阻止未经授权的访问。 加密&a…

[回馈]ASP.NET Core MVC开发实战之商城系统(五)

经过一段时间的准备&#xff0c;新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始&#xff0c;在之前的文章中&#xff0c;讲解了商城系统的整体功能设计&#xff0c;页面布局设计&#xff0c;环境搭建&#xff0c;系统配置&#xff0c;及首页【商品类型&#xff0c;ba…

Micropython STM32F4入门点灯第一课

Micropython STM32F4入门点灯第一课 &#x1f4cc;固件刷可参考前面一篇《STM32刷Micropython固件参考指南》&#x1f4cd;固件下载&#xff1a;https://micropython.org/download/?mcustm32f4&#x1f516;本例程基于STM32F4DISC&#xff0c;主控芯片STM32F4VGT6&#x1f4d1…

【在线oj网站项目】在线oj做题网站是如何用代码写出来的

简单读懂一个在线oj网站项目 逻辑1. 从数据库中读取题目信息1.1 创建题目数据库&#xff08;sql&#xff09;1.2 创建题目 类&#xff08;dao包下的problem&#xff09;1.3 实现数据库连接类 &#xff08;common包下的 DBUtil&#xff09;1. 通过datasource.getConnection();连…

剑指offer-3-10

文章目录 3.数组中的重复数字4.二维数组中的查找5.替换空格6.从尾到头打印链表7.重建二叉树&#xff08;⭐&#xff09;8.用两个栈实现队列10.青蛙跳台阶 3.数组中的重复数字 1.用set HashSet set1new HashSet();for(int i0;i<array.length;i){if(set1.contains(array[i])){…

【Anaconda】虚拟环境离线迁移

【Anaconda】虚拟环境离线迁移 项目中常常遇到需要在离线环境中下为anaconda安装有关深度学习的虚拟环境的问题&#xff0c;服务器设备不能连接互联网的环境。 文章目录 【Anaconda】虚拟环境离线迁移前言环境信息导出虚拟环境离线恢复虚拟环境总结 前言 为了实现Anaconda虚拟…

并行for循环,简单的改动让python飞起来

概要 Python在处理大的数据集的时候总是速度感人。代码一旦开始运行&#xff0c;剩下的时间只好满心愧疚地刷手机。 MPI&#xff08;Message Passing Interface&#xff09;是在并行计算中&#xff0c;在不同进程间传递信息的标准解决方案。mpi4py是它的python版本。 网上有大…

OpenUSD联盟:塑造元宇宙的3D未来

一、引言 近日&#xff0c;美国3D内容行业的五家主要公司苹果、英伟达、皮克斯、Adobe和Autodesk联合成立了OpenUSD联盟&#xff08;AOUSD&#xff09;。这一联盟的成立标志着元宇宙领域的一次重要合作&#xff0c;旨在制定元宇宙的3D图形标准。本文将深入探讨OpenUSD联盟的目…

配置NFS,遇到的问题总结(电脑连接WiFi,开发板和电脑直连)

我使用的正点原子的方法&#xff0c;仅展示遇到的问题。 1. 这一步&#xff0c;需要先将Ubuntu关掉&#xff0c;再进行设置。 如果设置了不显示&#xff0c;需要移出网络&#xff0c;再次添加。 先设置Windows的网络&#xff0c;再设置&#xff0c;虚拟机的网络&#xff0c;即…

idea运行web老项目

idea打开老项目 首先你要用idea打开老项目&#xff0c;这里看我之前发的文章就可以啦 运行web项目 1. 编辑配置 2. 添加tomcat项目 3. 设置tomcat参数 选择本地tomcat&#xff0c;注意有的tomcat版本&#xff0c;不然运行不了设置-Dfile.encodingUTF-8 启动&#xff0c;注意…

[openCV]基于拟合中线的智能车巡线方案V3

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

kafka 理论知识

1 首先要了解kafka是什么 Kafka是一个分布式的消息订阅系统 1.1 kafka存储消息的过程 消息被持久化到一个topic中&#xff0c;topic是按照“主题名-分区”存储的&#xff0c;一个topic可以分为多个partition&#xff0c;在parition(分区)内的每条消息都有一个有序的id号&am…