-
Notifications
You must be signed in to change notification settings - Fork 20
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
字段属性标记时, 需要保证整个数据结构只有当前字段长度可变,如此才能反推。
若大家在使用过程中有疑问,可以参考右边的目录列表进行查询