muduo Buffer类的使用与设计

目录

一、Buffer的数据结构

二、Buffer的操作

(1)初始值

(2)向Buffer里写入200字节

(3)从Buffer里读取50字节

(4)向Buffer里写入 200字节

(5)从Buffer里读取350字节


muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。

muduo github网址:https://github.com/chenshuo/muduo

一、Buffer的数据结构

 

muduo设计了buffer做为发送和接收数据的缓存,Buffer的内部是一个std::vector<char>,是一块连续的内存,其中有两个index,readIndex和writeIndex把vector的内容分成三块:prependable、readable、writeable

 

prependable = readIndex;

readable = writeIndex-readIndex

writable = size() - writeIndex

二、Buffer的操作

假设发送方发送了两条消息,长度分别为50字节和350字节,接收方分两次收到数据,每次200字节,然后进行分包,再分两次回调客户代码,其中readIndex和writeIndex被初始化为8,size()初始值为1032,这个过程Buffer的数据结构变化如下所示:

(1)初始值

 

(2)向Buffer里写入200字节

 

(3)从Buffer里读取50字节

 

(4)向Buffer里写入 200字节

 

(5)从Buffer里读取350字节

 

由于此时全部数据已经读取完毕,readIndex和writeIndex会返回原位以备再次使用。

muduo Buffer还支持内部腾挪,当readIndex比较靠后,留下巨大的prependable空间时,如果此时进行写入而writeable空间不够,Buffer不会重新分配内存,而是先把已有的数据移到前面去,腾出writable空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值