-
Notifications
You must be signed in to change notification settings - Fork 23
dynamicSize 属性详解
ray.zh edited this page Nov 24, 2023
·
6 revisions
V2.1.0版本新增属性
此属性和 dynamicSizeOf 属性功能大致相同, 两者不同之处如下:
dynamicSizeOf 依赖于其他字段来标明当前成员数量
dynamicSize 是通过反推计算出当前成员数量的(当然这需要满足以下条件)
- 消息可变部分只能有一处
- 消息可变部分的消息字节数固定
dynamicSize属性用于兼容一些老的报文协议。一般不建议使用此属性。且此属性仅能适用于String, Array, List
public class Teacher { @MagicField(order = 1) private int id; // 自动裁剪和包装, 此字段成员数最大 5 个 @MagicField(order = 2, dynamicSize = true, size = 5) private List<Student> students; @MagicField(order = 3) private int name; }
如上述数据结构, Teacher中有且只有students属性是可变(0-5个之间), 而且Student字节数固定.
此时Student成员数量可以通过总字节数倒推。
即:students 属性成员数量 = (总字节数 - 属性sizeOfstucent字节数 - 属性name字节数) / 单个Student属性字节数
所以 dynamicSize 字段属性标记时, 需要保证整个数据结构只有当前字段长度可变,如此才能反推。