我通過tcp/ip傳輸大數據時遇到了問題。要傳輸的字節向量的大小總是大約500000.我有2個解決方案來處理這個問題,但我不知道什麼是更好的或有另一種解決方案。C++:通過tcp/ip在發送字節中使用向量的最佳方法
對於2個解決方案,我有2個類來存儲數據。每個班有2種方法是:
push(std::vector<BYTE_T& data>);
vector<BYTE_T >pop();
#define BYTE_T unsigned char
方法1:使用vector<BYTE_T>
class buffDdata1 {
vector<BYTE_T> listData;
vector<BYTE_T> listDataTmp;
public:
buffDdata1() {
listData.reserver(500000);
listDataTmp.reserver(500000);
}
void push(vector<BYTE_T>& data) {
lock();
listData.insert(listData.end(), data.begin(), data.end());
unlock();
}
vector<BYTE_T>& pop() {
lock();
listDataTmp.clear();
listDataTmp.swap(listData);
unlock();
return listDataTmp;
}
};
方式2:使用
class buffData2 {
vector<vector <BYTE_T> > listData;
int nCount;
public:
buffData2() {
listData.reserver(200000);
}
void push(vector <BYTE_T>& data) {
lock();
listData.push_back(data);nCount++;
unlock();
}
vector <BYTE_T> pop() {
vector <BYTE_T> listRet;
lock();
for(int i=0; i< nCount; ++i) {
listRet.insert(listRet.end(), listData[i].begin(), listData[i].end());
}
unlock();
return listRet;
}
};
你有一個向量的每個字節?!?! – marsh 2015-03-19 03:05:33
爲什麼要建立列表或堆棧呢?只需直接寫入字節即可。我甚至不明白爲什麼你有'vector。' –
EJP
2015-03-19 03:29:29
@EJP這段代碼提供了一種合理的方式讓應用以線程安全的非阻塞方式累積數據,這樣'push()'工作線程不必擔心混合的部分發送,重試和/或阻塞。不是很好的代碼,但它確實有一定的用處。 – 2015-03-19 03:44:54