缓冲区Buffer(带廉价前置空间的可压缩线性缓冲区)
今天介绍的是一种缓冲区由于我在学习服务器认识到一种缓冲区觉得设计的还挺好的所以就介绍给大家。先看整体的代码static const int kPrePendIndex 8; // prependindex长度 static const int kInitalSize 1024; // 初始化开辟空间长度 class Buffer{ public: DISALLOW_COPY_AND_MOVE(Buffer); Buffer(); ~Buffer(); // buffer的起始位置 char *begin(); // const对象的begin函数使得const对象调用begin函数时 // 所得到的迭代器只能对数据进行读操作而不能进行修改 const char *begin() const; char *beginread(); const char *beginread() const; char *beginwrite(); const char *beginwrite() const; // 添加数据 void Append(const char *message); void Append(const char *message, int len); void Append(const std::string message); // 获得可读大小等 int readablebytes() const; int writablebytes() const; int prependablebytes() const; // 查看数据但是不更新read_index_位置 char *Peek(); const char *Peek() const; std::string PeekAsString(int len); std::string PeekAllAsString(); // 取数据取出后更新read_index,相当于不可重复取 // 定长 void Retrieve(int len); std::string RetrieveAsString(int len); // 全部 void RetrieveAll(); std::string RetrieveAllAsString(); // 某个索引之前 void RetrieveUtil(const char *end); std::string RetrieveUtilAsString(const char *end); //查看空间 void EnsureWritableBytes(int len); private: std::vectorchar buffer_; int read_index_; int write_index_; };这个缓冲区适用于可读可写的情况他里面有三个模块最前边的是prependable中间是readable后边是writable版本快。分别是预留可读可写板块。这里面的预留和已读板块是放在一起说的。他的最大的特点就是可以压缩掉已读的空间将可读空间往前copy一下每次追加新的数据就会执行一个判断语句if可写的数据大小lenwritable那么就是直接写else if查看压缩后是否够用如果够用就压缩然后追加else压缩过还不够只能增加writable的大小了我们这里的缓冲区维护的是vector的数组所以可以resize大小我们看一下代码void Buffer::EnsureWritableBytes(int len){ if(writablebytes() len) return; if(writablebytes() prependablebytes() kPrePendIndex len){ // 如果此时writable和prepenable的剩余空间超过写的长度则先将已有数据复制到初始位置 // 将不断读导致的read_index_后移使前方没有利用的空间利用上。 std::copy(beginread(), beginwrite(), begin() kPrePendIndex); write_index_ kPrePendIndex readablebytes(); read_index_ kPrePendIndex; }else{ buffer_.resize(write_index_ len); } }其次就是维护两个索引来计算预留可读可写空间。int read_index_; int write_index_;0preread_index_write_index_buffer.size()preread_index_-perwirte_index_-read_index_buffer.size()-write_Index_预留空间大侠已读大小可读大小可写大小缓冲区大小剩下的就是一些Retrieve的功能逻辑比较简单这里不在一一赘述其实这个预留空间目前并没有用到其实是非常有用的有的时候问们要先在缓冲过去写入正文然后再写进缓冲区可以用来封装报头。

相关新闻

如何快速掌握AssetStudio:完整游戏资源提取实战指南

如何快速掌握AssetStudio:完整游戏资源提取实战指南

如何快速掌握AssetStudio:完整游戏资源提取实战指南 【免费下载链接】AssetStudio AssetStudio is an independent tool for exploring, extracting and exporting assets. 项目地址: https://gitcode.com/gh_mirrors/ass/AssetStudio AssetStudio是一款功能…

2026/7/31 9:59:16 阅读更多 →
智能办公AI助手架构设计与实施指南

智能办公AI助手架构设计与实施指南

1. 智能办公AI助手的行业背景与核心价值过去三年间,企业办公场景的数字化需求呈现爆发式增长。根据Gartner 2023年 workplace technology调研报告,78%的企业正在或计划部署智能办公解决方案。这类系统最核心的痛点在于:传统OA系统仅实现流程电…

2026/7/31 9:59:16 阅读更多 →
G-Helper终极指南:轻量级华硕笔记本控制工具深度解析

G-Helper终极指南:轻量级华硕笔记本控制工具深度解析

G-Helper终极指南:轻量级华硕笔记本控制工具深度解析 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exp…

2026/7/31 9:58:16 阅读更多 →

最新新闻

电商AI作图工具全链路开发视角:工作流设计的产品思考

电商AI作图工具全链路开发视角:工作流设计的产品思考

一、行业底层问题:电商AI的瓶颈不在生成效果,而在工作流碎片化 从产品开发与工程落地视角来看,当前电商AI作图赛道早已解决“能不能画、画得像不像”的基础问题,通用大模型的渲染能力、场景生成能力、风格复刻能力已普遍达标。行业…

2026/7/31 10:42:29 阅读更多 →
【逆向百例】某电商数据分析平台响应数据解密逆向分析

【逆向百例】某电商数据分析平台响应数据解密逆向分析

本文记录了对某电商数据分析平台 API 响应加密机制的完整逆向过程,涵盖抓包侦察、参数验证、解密定位、算法识别与本地还原。该加密方案采用 AES-ECB PKCS7 gzip 的组合模式,密钥通过多层 toString(36) 编码混淆,属于典型的前端响应加密防护…

2026/7/31 10:42:29 阅读更多 →
手游联运合作流程实操:步骤、指标与复盘重点

手游联运合作流程实操:步骤、指标与复盘重点

手游联运合作流程实操的核心,是从渠道选择、资质提交、合同签署、技术接入、数据联调、正式上线、分成结算到运营复盘的完整链条。对于刚接触联运的发行团队、公会或MCN机构来说,流程中的每一个环节都可能影响最终的合作效果和收益。以下是对全流程的拆解…

2026/7/31 10:42:29 阅读更多 →
大模型应用开发工程师:开启AI落地新时代,小白程序员必备收藏指南

大模型应用开发工程师:开启AI落地新时代,小白程序员必备收藏指南

AI大模型应用开发工程师是连接技术与产业的关键角色,负责将复杂AI技术转化为实用工具。他们需对接业务需求,进行技术选型、应用开发、测试优化,并确保产品安全合规。这一职业薪资高、前景好,是程序员转行或提升技能的重要方向&…

2026/7/31 10:42:29 阅读更多 →
MathType公式在技术博客中的完美呈现方案

MathType公式在技术博客中的完美呈现方案

1. 项目背景与需求分析在技术博客写作过程中,数学公式的呈现一直是个痛点。特别是对于科研工作者、工程师等需要频繁使用数学表达式的群体,如何在博客中完美保留MathType公式的属性和格式,成为提升内容质量的关键需求。我最近在迁移一批学术文…

2026/7/31 10:42:29 阅读更多 →
AI 批量生成电商商品图的效率瓶颈分析——从单线程到批处理的架构演进

AI 批量生成电商商品图的效率瓶颈分析——从单线程到批处理的架构演进

1. 问题场景典型铺货型电商卖家的日常需求:月上新 200-500 SKU,每 SKU 需 8-15 张套图(主图辅图场景图详情图变体图)。总需求 20015 3000 张图/月。传统 AI 出图流程(以 Midjourney V7 为例):…

2026/7/31 10:41:29 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻