当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 安卓开发中使用缓冲机制

安卓开发中使用缓冲机制 时间:2018-09-20      来源:未知

1.1 功能介绍

为了适配网络传输线程和数据处理线程的速度,并且保证所有数据不丢失,使用了缓冲技术。其实质就是建立一个大小合适的哈希表用于存储数据来模拟队列先进先出的效果。同时,为了协调读和写线程,使用了同步的技术。

1.2 函数介绍

1)向缓冲中增加数据

public synchronized Boolean addBuffer(byte[] data) {

if (data != null) {

if (buffer.size() < volume) {// 确保缓存不会溢出

buffer.put(buffer.size(), data);

return true;

} else {

log.E("%%%%% buffer.size() > volume !!!! %%%%%");

return false;

}

} else {

log.E("%%%%% addBuffer() param is null !!!! %%%%%");

return false;

}

}

红色标记的synchronized表示同步,即:对于同一段缓冲区,读和写操作同一时间只能进行一种,这样可以保证写一半的数据被读取的情况不会出现。

2)从缓冲中读取数据

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;

}

确保只有当缓冲的大小大于0的时候才会读取数据。

3)向命令缓冲中增加数据

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;

}

}

增加的命令会被传递到主线程,用于实时的处理特殊命令,如:按钮按下的效果。

{

4)获得缓存的容量

public synchronized int getVolume() {

return buffer.size();

}

用于获得缓存的大小,缓存的大小是一个必须要实时监控的数据,溢出有可能造成程序的异常退出。

pthread_exit(0);

上一篇:对Llinux下signal机制的一点认识

下一篇:关于linux下的xinetd服务

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部