// if (paramCertProtocolInfo == null)
// return 0;
// paramByteBuffer.flip();
// byte[] arrayOfByte = null;
// int i = 0;
// int k = 0;
// int j = 0;
// label76: while (true) {
// int m = 0;
// for (int n = i; paramByteBuffer.hasRemaining(); n++) {
// byte b = paramByteBuffer.get();
//
//
// switch (n) {
// default:
// continue;
// case true:
// i = paramCertProtocolInfo.getSum();
// LogUtils.debug("Sum:{} data:{}", new Object[] { Integer.toHexString(i), Integer.toHexString(b) });
// if (i == b) {
// paramByteBuffer.clear();
// LogUtils.error("download cert parse ok", new Object[0]);
// return 0;
// }
// LogUtils.error("download cert parse err", new Object[0]);
// paramByteBuffer.compact();
// paramByteBuffer.flip();
// n = 0;
// continue;
// case true:
// if (b == 3) {
// paramCertProtocolInfo.setExt(b);
// break;
// }
// paramByteBuffer.compact();
// paramByteBuffer.flip();
// n = 0;
// continue;
// case true:
// arrayOfByte[m] = b;
// i = m + 1;
// m = i;
// if (i >= j) {
// i = n + 1;
// paramCertProtocolInfo.setData(arrayOfByte);
// continue label76;
// }
// continue;
// case true:
// if (!k) {
// i = (b & 0xFF) * 256;
// j = 1;
// } else {
// i = j + (b & 0xFF);
// j = 0;
// }
// if (++m < 2) {
// k = j;
// j = i;
// continue;
// }
// if (i <= 0) {
// paramByteBuffer.compact();
// paramByteBuffer.flip();
// k = j;
// j = i;
// } else {
// LogUtils.debug("dataLen:{}", new Object[] { Integer.valueOf(i) });
// paramCertProtocolInfo.setDataLen(i);
// arrayOfByte = new byte[i];
// k = j;
// j = i;
// i = n + 1;
// }
// n = 0;
// continue;
// case true:
// LogUtils.debug("current cmd2:{}", new Object[] { Integer.toHexString(b) });
// paramCertProtocolInfo.setCmd2(b);
// i = n + 1;
// k = 0;
// continue label76;
// case true:
// if (b != 1 && b != 22 && b == 25)
// break;
// continue;
// case true:
// if (k == 0) {
// j = (b & 0xFF) * 256;
// i = 1;
// } else {
// j += b & 0xFF;
// i = 0;
// }
// if (++m < 2) {
// k = i;
// continue;
// }
// if (j <= 0) {
// paramByteBuffer.compact();
// paramByteBuffer.flip();
// k = i;
// } else {
// LogUtils.debug("total len:{}", new Object[] { Integer.valueOf(j + 10) });
// k = i;
// i = n + 1;
// }
// n = 0;
// continue;
// case true:
// if (b == -36)
// break;
// continue;
// case true:
// if (b != 1 && b == 20) {
// LogUtils.debug("FrameId:{}", new Object[] { ByteUtils.byteArray2HexString(new byte[] { b }) });
// break;
// }
// continue;
// case false:
// if (b == 1) {
// paramCertProtocolInfo.setSoh(b);
// break;
// }
// paramByteBuffer.compact();
// paramByteBuffer.flip();
// continue;
// }
// }
// paramByteBuffer.limit(paramByteBuffer.capacity());
// return -1;
// }
修改后
public static int parseProtocol(ByteBuffer paramByteBuffer, CertProtocolInfo paramCertProtocolInfo) {
if (paramCertProtocolInfo == null)
return 0;
paramByteBuffer.flip();
byte[] arrayOfByte = null;
int dataLen = 0;
int i = 0; // Counter variable
int j = 0; // Length accumulator variable
boolean lengthFlag = false;
while (paramByteBuffer.hasRemaining()) {
byte b = paramByteBuffer.get();
if (i == 0) {
if (b == 1) {
paramCertProtocolInfo.setSoh(b);
} else {
paramByteBuffer.compact();
paramByteBuffer.flip();
}
} else if (i == 1) {
if (b == -36) {
// Handle condition when b equals -36
} else if (b != 1 && b == 20) {
LogUtils.debug("FrameId:{}", new Object[]{ByteUtils.byteArray2HexString(new byte[]{b})});
}
} else if (i == 2) {
// Handle condition when i equals 2
if (!lengthFlag) {
j = (b & 0xFF) * 256;
lengthFlag = true;
} else {
j += b & 0xFF;
lengthFlag = false;
}
} else if (i == 3) {
// Handle condition when i equals 3
if (!lengthFlag) {
dataLen = (b & 0xFF) * 256;
lengthFlag = true;
} else {
dataLen += b & 0xFF;
lengthFlag = false;
}
} else if (i == 4) {
// Handle condition when i equals 4
if (arrayOfByte == null) {
arrayOfByte = new byte[dataLen];
}
arrayOfByte[i - 4] = b;
} else if (i == 5) {
// Handle condition when i equals 5
if (i - 4 >= dataLen) {
// Data fully received, process it
paramCertProtocolInfo.setData(arrayOfByte);
paramByteBuffer.clear();
LogUtils.error("download cert parse ok", new Object[0]);
return 0;
} else {
arrayOfByte[i - 4] = b;
}
i++;
}
}
paramByteBuffer.limit(paramByteBuffer.capacity());
return -1;
}