牛骨文教育服务平台(让学习变的简单)
博文笔记

[踏石留印之Android] byte[]数组的截取方法arraycopy与串口数据流处理

创建时间:2017-03-14 投稿人: 浏览次数:1894

在做的项目中使用了byte[]数组来接收android USB serial 串口数据,由于串口数据有很多无用的响应指令,故要对其截取,arraycopy是效率很高的截取方式,调用方式如下:

System.arraycopy(src, srcPos, dest, destPos, length)

参数解释引用大神的:

参数解析:

src:byte源数组
dest,:byte目的数组(截取后存放的数组)
destPos:截取后存放的数组起始位置(0位置有效)
length:截取的数据长度
http://blog.csdn.net/educast/article/details/52332496

数据流处理,我用了一个for循环遍历数组,进行数据筛查:

      temp = driver.read();
      size = temp.length;
      int j = 0;
      if(size > 0){
           for (int i=0;i<size-10;i++){
                 //进行筛选摸排,选出我所需要的数据块              
               if((temp[i] == HEAD)&& (temp[i+1] == (byte)0x02) && (temp[i+2] == (byte)0x22) && (temp[i+3] == (byte)0x00)){                        
                   int len = temp[i+4]&0xff; //数据块内的长度标识
                   if(temp[len + 6] != END){//数据区尚未接收完整
                            continue ; }
                   byte[] packageBytes = new byte[len + 7];
                   //运用arraycopy方法
                   System.arraycopy(temp, i, packageBytes, 0, len + 7);
                   //利用数据块性质再次进行排查
                   byte crc = checkSum(packageBytes);
                   if( crc == packageBytes[len + 5]){
                       //将packgeBytes再截取一块有效数据              
                       byte[] epcBytes = new byte[len - 5];
                       System.arraycopy(packageBytes, 8, epcBytes, 0, len - 5);
                   }
               }
       }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。