粘包处理主要用于指令批量接收的时候可能会出现不完整包的情况
这里以这样的协议指令为例:
帧头+数据长度+实际数据+校验和+帧尾
/**
* 黏包处理
**/
private static String tempCmd="";//临时半包指令内容,用于指令拼接
//获取正式的数据
public static String[] getTrueData(String data,String head,String end) {
data = data.toLowerCase();
boolean endFlag = end.equals(data.substring(data.length() -2,data.length()));
String[] s =new String[stringSub(data,end + head) +1];
int num =0;
for(inti =0;i < s.length;i++) {
data = data.substring(num);
num = data.indexOf(end + head) +2;
if(num ==1) {
num = data.length();
}
if(i ==0) {
String t = data.substring(0,num);
if(t.substring(0,2).equals(head)) {
tempCmd="";
}
s[0] =tempCmd+ t;
}else{
s[i] = data.substring(0,num);
if(i == (s.length-1) && (!endFlag)) {
tempCmd= s[i];
}
}
}
return s;
}