如何在实体类里面 byte[] 数组分割的时候实现动态赋值

这个问题真恶心耗费了我差不多一下午的时间才解决。

我先说明一下我的需求吧,供大家参考。

我是在解析一段数据,这段数据我们是采用字节来截取的,在数据中,前几个字段都是有指定的字节长度,后面的也有指定的字节长度,就中间的没有指定长度,类似如下图:

在第七个的字节长度为N的意思是说,这个字段的长度不一定,说不定有多少呢。

 然后是我的以前的解决方案,

//实体类
@StructClass
public class BMS_StateMessagess {
    @StructField(order = 0)
    private byte[] field1 = new byte[1];//字段1
    @StructField(order = 1)
    private byte[] field2 = new byte[1];//字段2
    @StructField(order = 2)
    private byte[] field3 = new byte[1];//字段3
    @StructField(order = 3)
    private byte[] field4 = new byte[1];//字段4
    @StructField(order = 4)
    private byte[] field5 = new byte[1];//字段5
    @StructField(order = 5)
    private byte[] field6 = new byte[2];//字段6

    //从后端处理的值传到这里
    private int field7Length;//字段7长度

    //然后将值再赋值到 byte 里面充当长度
    @StructField(order = 6)
    private byte[] field7 = new byte[field7Length];//字段7
    @StructField(order = 7)
    private byte[] field8 = new byte[2];//字段8
    @StructField(order = 8)
    private byte[] field9 = new byte[1];//字段9
    //get... set...就不写了
}

然后是后台我是这样写的

//这是数据
String message2 = "12423534668758832345096532468883457222789367087835345973729020207398009999";

BMS_StateMessagess bms_stateMessagess = new BMS_StateMessagess();

//先计算,数据的长度减去已知的字节长度得到的是字符的长度再除以2就剩下N的字节长度
int i1 = (message2.length() - 10 * 2) / 2;

//将值 set 给 Field7Length 里面
bms_stateMessagess.setField7Length( i1 );

这样写是有问题的,问题在,我们通过 new 这个实体类的时候,实体类就已经完成了字节分割,因为我们没有指定长度,所以第七个就是个空的,这样是不对的,不是我们想要的东西。

然后我们就通过各种测试,发现了在后端这样写也可以

String message2 = "12423534668758832345096532468883457222789367087835345973729020207398009999";

BMS_StateMessagess bms_stateMessagess = new BMS_StateMessagess();

//在这里进行计算,直接在这里进行字节分割的操作,并直接得到自己需要的数据
byte[] field7Length = new byte[(message2.length()-10*2)/2];

//然后在这里直接 set 给字段里取,这样实体类里的字段就充当的普通字段读取操作,并不参与分割数据。
bms_stateMessagess.setField7(field7Length);

这样就完美解决了。

实属不易,记录一下分享而已。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

槐序二十四

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值