数据格式
0xAA,0xBB,0xCC,0x01,0x00,0x06,0x00,0x00,0x00,0x00,0xEF,0xFF
头部 0xAA,0xBB,0xCC
数据类型(1文本,2二进制) 0x01
数据长度 0x00,0x06
分包预留 0x00
数据内容 0x00,0x00,0x00
校验位动态计算 0xEF(0x00,0x06,0x00,0x00,0x00,0x00) 校验和
结束位0xFF
https://github.com/INTKILOW/SerialApi
```java
import android.util.Log;
public class DataHelper {
private final byte[] header = {(byte) 0xAA, (byte) 0xBB, (byte) 0xCC};
private final byte[] footer = {(byte) 0xFF};//未校验
private byte[] data = null;//数据
private byte[] buff = null;//缓冲区
private int dataLen; //数据内容区长度
private int position = 0;//当前下标位置 第一个合法的头部数据位置
private int hL = header.length; //头的长度 3
private CallBack callBack;//解析成功回调
private boolean stop = true;
private boolean isCompress = true;//是不是需要新协议
public void onDestroy(){
stop = false;
}
public DataHelper(){}
public DataHelper(boolean isCompress){
this.isCompress = isCompress;
}
/**
* @param bt 0xAA,0xBB,0xCC 0x01, --0x00,0x06, 0x00, 0x00,0x00,0x00,-- 0xEF, 0xFF
* <p>
* 头部 数据类型(1文本,2二进制) 数据长度(--xxxx--) 分包预留 数据内容 校验位动态计算 结束位
*/
public void parseData(byte[] bt) {
if(!isCompress){
callBack.call(new String(bt),true);
return;
}
if (bt == null || bt.length <= 0) return;
this.data = bt;
/**
* 判断缓冲区里面是否有数据 添加到当前数据
*/
if (buff != nul