需求描述: 每次从字节流中读取1001个字节的数据,并将数据存放在一个byte[1001] buffer中。
如何循环buff,判断该缓冲区中是否含有“0x00,0x00,0x00,0x01"这个四个字节的数据呢?(数据流中肯定会有这四个字节的数据的)算法效率越高越好哦,毕竟是在手机中运行的。谢谢。
如何循环buff,判断该缓冲区中是否含有“0x00,0x00,0x00,0x01"这个四个字节的数据呢?(数据流中肯定会有这四个字节的数据的)算法效率越高越好哦,毕竟是在手机中运行的。谢谢。
解决方案 »
- dev/graphics/fb0 或者dev/fb0 文件中存储的数据是什么样子的数据?是不是二进制
- 安卓 求一个类似于拍照完成后图片缩小跑到屏幕边缘的动画
- 我的Eclipse不出提示 (急坐等)
- Html.fromHTML问题
- SVG在Android项目中如何应用
- 在线等externalBytesAvailable(): footprint 1708016+extAlloc35041168+n167040>max
- 关于handler和broadcast的问题
- onKeyDown方法里面怎么让setOnItemClickListener起作用,onKeyDown使用,onKeyDown和setOnItemClick绑定
- 关于Intent.ACTION_DIAL无法启动的问题!求大神指教。
- Android平台是不是不能同时预览两个镜头?
- android机器播放VLC串流RTSP的问题
- 100分请教---如何在Android平台上如何做类似地图的效果呢?
private void ReadPic(){
try{
InputStream in = getResources().openRawResource(R.raw.app704);
boolean bRet = IsContainSpecialChars(in);
Toast.makeText(this, "" + bRet, Toast.LENGTH_SHORT).show();
in.close();
}
catch(Exception e){
e.printStackTrace();
}
}
// 查找"0x00,0x00,0x00,0x01"
private boolean IsContainSpecialChars(InputStream in){
try{
byte [] buffer = new byte[1001];
int nRead = 0;
int nZeroCount = 0;
int nClips = 0;
while ((nRead = in.read(buffer)) > 0){
nClips++;
for (int i=0; i<nRead; i++)
{
if (buffer[i] == 0x00)
{
nZeroCount++;
}
else
{
if (nZeroCount >= 3 && buffer[i] == 0x01)
{
Toast.makeText(this, "found postion:" + ((nClips - 1) * 1001 + i) , Toast.LENGTH_SHORT).show();
return true;
}
nZeroCount = 0;
}
}
}
}
catch(Exception e){
e.printStackTrace();
}
return false;
}
简单解释一下,你要查找的数据比较特殊,前三个byte相同。
因此查找的时候记录下连续出现了几个0. 记录方法很简单,变量nZeroCount遇0x00加1,遇非0x00置0.
遇到0x01时,如果已经连续出现3个或3个以上的0,则返回true。这个效率肯定没问题,只遍历了一遍。任何优化都不大可能提高10%以上的效率了。
找到“0x00,0x00,0x00,0x01"之后还没有算完,然后需求跳过18个字节,继续查找“0xFF,0xD8,0xFF,0xE0"标记,找到这些内容之后,再判断接下来的两个字节是否是”0x00,0x00“是的的话则收集数据,否的话 继续循环。