【无标题】

该代码片段描述了一个方法,用于解析CertProtocolInfo对象中的协议数据,通过ByteBuffer读取字节并处理不同条件下的指令和数据长度。
摘要由CSDN通过智能技术生成
//        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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值