先贴个头文件的设计:
首先缓冲区中没有任何数据时,nIdWrite、nIdRead读写下标都为0。
为了判断缓冲区中是否还有数据可读或者可写,我判断的依据是:
1)当nIdWrite 等于 nIdRead时,表示缓冲区内没有任何数据可读;否则存在可读的数据
2)当剩余的空间小于我们所需要的空间时,表示缓冲区不能再继续写数据,否则可以进行写数据
3)这里说明一下,当剩余空间 等于 我们所需要的空间时,实际上也可以进行写数据的, 只不过需要用一个标记来标记缓冲区是否有数据。
否则,这个时候nIdWrite ** 等于 **nIdRead, 无法区分缓冲区到底是有数据还是满了的情况!
//C++编写了一个环形缓冲区,实际上是用数组来进行模拟。
#pragma once class RingBuffer { public: RingBuffer(); ~RingBuffer(); public: char* createRingBuf(int nByteSize); bool writeRingBuf(char* ringBuf, char* pSrc, int nByteSize); bool readRingBuf(char* ringBuf, char* pBuffer,int &nByteSize); private: bool isCanRead(char* ringBuf);// 判断是否可以再进行读操作 bool isCanWrite(char* ringBuf, int nByteSize);// 判读剩余的空间是否能够容纳nByteSize字节的数据 int getFreeOfRingBuf(char* ringBuf);// 计算剩余的空间大小 int getBytesOfRingBuf(char* ringBuf);/*从环形缓冲区获取可写字节数*/ int flushRingBuf(char* ringBuf);/*清环形缓冲区空间*/ private: int m_nIdWrite; // 读下标标记 int m_nIdRead; // 写下标标记 };
参考链接:
https://www.cnblogs.com/dodng/p/4367791.html