安(an)卓開發中使用緩沖機制
時間:2018-09-20 來源:未知
1.1 功能介紹
為(wei)了適配網絡傳輸線程和(he)數據(ju)(ju)處理線程的(de)速度,并且保證所(suo)有數據(ju)(ju)不丟(diu)失,使用(yong)(yong)了緩沖技(ji)術(shu)。其實(shi)質(zhi)就是建立一個大小合(he)適的(de)哈希表用(yong)(yong)于存儲(chu)數據(ju)(ju)來模(mo)擬隊(dui)列(lie)先進先出的(de)效(xiao)果。同(tong)時,為(wei)了協(xie)調讀和(he)寫線程,使用(yong)(yong)了同(tong)步的(de)技(ji)術(shu)。
1.2 函數介紹
1)向緩沖(chong)中增加數據
public synchronized Boolean addBuffer(byte[] data) {
if (data != null) {
if (buffer.size() < volume) {// 確保緩存(cun)不會溢出
buffer.put(buffer.size(), data);
return true;
} else {
log.E("%%%%% buffer.size() > volume !!!! %%%%%");
return false;
}
} else {
log.E("%%%%% addBuffer() param is null !!!! %%%%%");
return false;
}
}
紅(hong)色標記的synchronized表示同步,即:對于同一段緩沖區,讀(du)和寫操作同一時(shi)間只能進(jin)行一種,這樣可以保(bao)證寫一半(ban)的數據被讀(du)取的情況不(bu)會出現。
2)從緩沖中(zhong)讀取數據
public synchronized byte[] getBuffer() {
byte[] data = null;
if (buffer.size() > 0) {
data = buffer.get(buffer.size() - 1);
buffer.remove(buffer.size() - 1);
} else {
log.E("%%%%% readBuffer.size() < 0 !!!! %%%%%");
}
return data;
}
確保只有當緩沖的(de)大小大于(yu)0的(de)時候才會讀取數據。
3)向命令緩沖中增加(jia)數據
public synchronized Boolean addCmdBuffer(int cmd, int type, int id) {
byte[] cmdd = { (byte) cmd, (byte) type, (byte) id };
if (buffer.size() < volume) {
buffer.put(buffer.size(), cmdd);
return true;
} else {
log.E("%%%%% buffer.size() > volume !!!! %%%%%");
return false;
}
}
增加的命令(ling)會被傳遞到主線程,用于實時的處理特殊命令(ling),如:按(an)鈕按(an)下的效(xiao)果(guo)。
{
4)獲得緩存的容(rong)量
public synchronized int getVolume() {
return buffer.size();
}
用于(yu)獲得緩(huan)存(cun)的大小,緩(huan)存(cun)的大小是一個必須(xu)要(yao)實時監控的數(shu)據,溢(yi)出有可(ke)能造成程序的異常退出。
pthread_exit(0);

