《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存

 系列文章目录 

《ZLToolKit源码学习笔记》(1)VS2019源码编译

《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析

《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析

《ZLToolKit源码学习笔记》(4)工具模块之消息广播器

《ZLToolKit源码学习笔记》(5)工具模块之资源池

《ZLToolKit源码学习笔记》(6)线程模块之整体框架概述

《ZLToolKit源码学习笔记》(7)线程模块之线程池组件:任务队列与线程组

《ZLToolKit源码学习笔记》(8)线程模块之线程负载计算器

《ZLToolKit源码学习笔记》(9)线程模块之任务执行器

《ZLToolKit源码学习笔记》(10)线程模块之线程池

《ZLToolKit源码学习笔记》(11)线程模块之工作线程池WorkThreadPool

《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述

《ZLToolKit源码学习笔记》(13)事件轮询模块之管道的简单封装

《ZLToolKit源码学习笔记》(14)事件轮询模块之定时器

《ZLToolKit源码学习笔记》(15)事件轮询模块之事件轮询器EventPoller

《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述

《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil

《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存(本文)

《ZLToolKit源码学习笔记》(19)网络模块之套接字封装

《ZLToolKit源码学习笔记》(20)网络模块之TcpServer

《ZLToolKit源码学习笔记》(21)网络模块之TcpClient与Session

《ZLToolKit源码学习笔记》(22)网络模块之UdpServer


前言

对原始数据char* data进行封装,提供不同的数据访问方式,用于TCP与UDP的数据收发。


目录

    系列文章目录

前言

一、概述


一、概述

 Buffer:缓存抽象基类。有两个虚函数,data和size,前者获取数据指针,后者获取数据长度,派生类需要实现这两个函数。仅通过data拿到char*时,不要直接就访问数据,因为数据可能是二进制的(不能以\0判断结尾)。std::string是可以存储二进制数据的,初始化时需要使用string(char*,int count),指定长度后不会以\0结束。

BufferOffset:基于原始数据进行偏移,截取指定长度的数据。从代码中的使用来看,由于offset和len都用的默认值,所以该类等价于直接使用std::string。

BufferOffset(C data, size_t offset = 0, size_t len = 0);

typedef BufferOffset<string> BufferString;

BufferRaw:单例类,通过create静态函数返回一个自身的智能指针对象。

BufferLikeString:类似std::string,主要是为了提高内存使用率,避免频繁申请内存。但感觉这个类没啥作用,直接使用std::string完全可以。理解该类主要看下三个成员变量:

size_t _erase_head;//原始数据中,有效数据距离开始位置的距离(开头无效数据的长度)
size_t _erase_tail;//原始数据中,有效数据距离末尾位置的距离(末尾无效数据的长度)
string _str;//原始数据

BufferSock:将Buffer和网络通信地址信息sockaddr关联起来。

BufferList:是BufferSock的友元类。接受一个Buffer的list,并提供了发送list中数据的send接口。

BufferList(List<std::pair<Buffer::Ptr, bool> > &list, SendResult cb = nullptr);

ssize_t send(int fd, int flags, bool udp);

 send在发送UDP数据时,Buffer的实例化对象只能是BufferSock,因为会用到BufferSock中的sockaddr信息。发送TCP数据的话,则不限制具体的类型,因为用到的fd之前已经connect了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦时小

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值