寫c#的同志一定覺得byte 比c++的 byte * 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c#的特性,不需要象c++那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c#和c++,所以寫了個c++的類,以便方便地管理位元組流。
很簡單,先定義乙個類:cmemorybuffer。位元組流內部可以用std::vector來儲存,當然,考慮到效率,有些地方處理還是要考慮下。先把**貼出來,然後解釋為什麼這麼做。
標頭檔案:
#include #include#include
using
namespace
std;
class
cmemorybuffer
void
clear() ;
int getlength() const
bool isempty() const
public
: vector
m_vctbuffer;
};
cpp檔案:
#include "stdafx.h
"#include
"memorybuffer.h
"cmemorybuffer::cmemorybuffer(
void
)
cmemorybuffer::~cmemorybuffer(void
)
cmemorybuffer::cmemorybuffer(
const cmemorybuffer &other)
cmemorybuffer::cmemorybuffer(
const byte *tpbytes ,int
tilength)
void
cmemorybuffer::clear()
const byte * cmemorybuffer::c_bytes() const
byte * cmemorybuffer::copyout(int &tilength) const
void cmemorybuffer::copyfrom(const byte * tpbytes , int
tilength)
tilength)
void cmemorybuffer::insert(int tistartindex,const byte * tpbytes , int
tilength)
else
if((tistartindex + tilength) else
}
void cmemorybuffer::copyto(const byte ** tppbytes, int &tilength)const
cmemorybuffer & cmemorybuffer::operator = (const cmemorybuffer &other)
return *this
; }
cmemorybuffer & cmemorybuffer::operator += (const cmemorybuffer &other)
return *this
; }
解釋下幾點:
1、void cmemorybuffer::clear()
這地方之所以要這麼寫,是因為vector有個毛病,clear後記憶體空間還不釋放,需要物件釋放後才釋放,如果頻繁操作乙個大的位元組流,怕影響 記憶體效能.
2、void cmemorybuffer::copyfrom(const byte * tpbytes , int tilength)
{this->clear();
if(tpbytes == null || tilength == 0) return;
m_vctbuffer.resize(tilength,0);
memcpy(&m_vctbuffer[0],tpbytes,tilength);
很多人可能會寫成乙個迴圈語句:
for(int i = 0; i < tilength; i ++)
m_vctbuffer.push_back(tpbytes[i]);
這樣寫效率太低。
** :
C 實現的Buffer類
寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...
C 實現的Buffer類
寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...
C 實現的Buffer類
寫c 的同志一定覺得byte 比c 的 byte 加 length的方式好的多。一來,只需要乙個物件就可以是表示一段位元組流,另一方面,由於c 的特性,不需要象c 那樣還要記得刪除指標。由於我工作中,需要頻繁地試用c 和c 所以寫了個c 的類,以便方便地管理位元組流。很簡單,先定義乙個類 cmemo...