MsgUtil:
/* * @headerAndBody 包含消息头+消息体,包含SOH,不包含checksum域 */ public static String checkSum(String headerAndBody) { byte[] headerAndBodyBytes = headerAndBody.getBytes(); int sum = 0; for (byte b : headerAndBodyBytes) { sum += b; } String rt = String.valueOf((sum) % 256); /* * 在模256之后需要转换成固定长度为3字符串 */ if (rt.length() == 1) { rt = "00" + rt; } else if (rt.length() == 2) { rt = "0" + rt; } else { } return rt; } public static String getGMTTime(){ SimpleDateFormat foo = new SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS", Locale.ENGLISH); foo.setTimeZone(TimeZone.getTimeZone("GMT")); return foo.format(new Date()); } public static String[] seperate(String msgStr){ String[] tags=msgStr.split(BaseMsg.SOH); List<Integer> seqHead=new ArrayList<Integer>(); List<Integer> seqTailer=new ArrayList<Integer>(); int indexHead=0; int indexTail=0; boolean firstTail=true; if(tags.length<5){ throw new InValidDataException("消息格式错误"); }else{ String tag=tags[0]; String [] ts=tag.split("="); if(ts.length!=2){ throw new InValidDataException("消息格式错误"); } String tagId=ts[0]; if(!tagId.equals("8")){ throw new InValidDataException("消息格式错误"); } String tag1=tags[1]; String [] ts1=tag1.split("="); if(ts1.length!=2){ throw new InValidDataException("消息格式错误"); } String tagId1=ts1[0]; if(!tagId1.equals("9")){ throw new InValidDataException("消息格式错误"); } String tag2=tags[2]; String [] ts2=tag2.split("="); if(ts2.length!=2){ throw new InValidDataException("消息格式错误"); } String tagId2=ts2[0]; if(!tagId2.equals("35")){ throw new InValidDataException("消息格式错误"); } String tag3=tags[tags.length-1]; String [] ts3=tag3.split("="); if(ts3.length!=2){ throw new InValidDataException("消息格式错误"); } String tagId3=ts3[0]; if(!tagId3.equals("10")){ throw new InValidDataException("消息格式错误"); } } for(int i=0;i<tags.length;i++){ String tag=tags[i]; String [] ts=tag.split("="); if(ts.length!=2){ throw new InValidDataException("消息格式错误"); } String tagId=ts[0]; if(allHead.contains(tagId)){ seqHead.add(i); indexHead=i; } if(allTailer.contains(tagId)){ seqTailer.add(i); if(firstTail){ indexTail=i; } firstTail=false; } } for(int i=0;i<seqHead.size()-1;i++){ if(seqHead.get(i+1)-seqHead.get(i)!=1){ throw new InValidDataException("消息格式错误"); } } for(int i=0;i<seqTailer.size()-1;i++){ if(seqTailer.get(i+1)-seqTailer.get(i)!=1){ throw new InValidDataException("消息格式错误"); } } int index=0; indexHead++; while(indexHead-->0){ index=msgStr.indexOf("=", index+1); } index=msgStr.indexOf(BaseMsg.SOH, index); String head=msgStr.substring(0, index+1); int indexT=0; while(indexTail-->0){ indexT=msgStr.indexOf("=",indexT+1); } indexT=msgStr.indexOf(BaseMsg.SOH, indexT); String tailer=msgStr.substring(indexT+1); String body=msgStr.substring(index+1, indexT+1); String[]sep=new String[3]; sep[0]=head; sep[1]=body; sep[2]=tailer; return sep; }
checkSum计算10的值,
seperate将消息,分割为头,体,尾