Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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 字段属性标记时, 需要保证整个数据结构只有当前字段长度可变,如此才能反推。

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /