Buffer数据结构
来源:互联网 发布:java编程题及答案 编辑:程序博客网 时间:2024/06/06 00:18
muduo中的Buffer为封装了的vector。vector为一块连续空间,且其本身具有自动增长的性质,它的迭代器为原始指针,使用起来较为方便。 vector另外Buffer有两个data member,指向该vector中的两个元素,这两个index为int类型。
为什么这两个index为int类型?
vector自带自动扩增功能,要是index为指针的话,扩增之后指针会失效,而int类型不会发生变化
readindex和writeindex把vector分成了三个部分:prependable、readable、writable
各个空间大小计算公式为:
prependable = readIndex
readable = writeIndex - readIndex
writable = size() - writeIndex
Muduo Buffer 里有两个常数 kCheapPrepend ( kCheapPrepend 为8)和 kInitialSize(1024),定义了 prependable 的初始大小和 writable 的初始大小。(readable 的初始大小为 0。)
class Buffer : public muduo::copyable
{
public:
static const size_t kCheapPrepend = 8;//前面预留空间大小
static const size_t kInitialSize = 1024;//初始化存储数据空间
explicit Buffer(size_t initialSize = kInitialSize)
: buffer_(kCheapPrepend + initialSize),//初始化Buffer总大小
readerIndex_(kCheapPrepend),
writerIndex_(kCheapPrepend)
{
assert(readableBytes() == 0);
assert(writableBytes() == initialSize);
assert(prependableBytes() == kCheapPrepend);
}
}
如果向Buffer写入了200字节,那么布局如图1,writeIndex 向后移动了 200 字节,readIndex 保持不变,readable 和 writable 的值也有变化。
—————————————————- 图1—————————————
如果有又从 Buffer read() & retrieve() (下称“读入”)了 50 字节,结果见图 2。与上图相比,readIndex 向后移动 50 字节,writeIndex 保持不变,readable 和 writable 的值也有变化(这句话往后从略)。
—————————————————- 图2—————————————
当再次向Buffer写入数据的时候,大小超过writable的大小,vector会增长
- Buffer数据结构
- XML和Google 数据结构protocol buffer 比较
- buffer
- buffer
- Buffer
- Buffer
- Buffer
- Buffer
- Buffer
- Linux TCP/IP 协议栈的关键数据结构Socket Buffer
- Linux TCP/IP 协议栈的关键数据结构Socket Buffer
- kernel中常用数据结构之kfifo(改造为ring buffer)
- Caffemodel数据结构解析与Protocol Buffer技术详解(C++实例)
- 扫描线z-buffer消隐算法思想与数据结构
- (转贴)Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
- Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
- [转]Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
- Linux TCP/IP协议栈的关键数据结构Socket Buffer(sk_buff )
- SQL UNION 和 UNION ALL 操作符
- 获取验证码倒计时
- php多进程造成数据错乱
- 斐波那契数列,递归算法 C#
- android studio build.gradle 文件详解
- Buffer数据结构
- AS-->打开第三方项目之前,必做的事(新手必看)
- OpenGL 笔记
- 浅谈SuperMap iClient for JavaScript中的标签使用
- Linux上安装ruby
- LeetCode刷题【Array】 Remove Duplicates from Sorted Array II
- mapreduce系列(9)--自定义OutputFormat
- function
- launch failed.Binary not found in Linux/Ubuntu解决方案