Code Monkey home page Code Monkey logo

Comments (9)

MisterChangRay avatar MisterChangRay commented on July 28, 2024

dynamicSize = 5, 是指这个属性最大字节或成员为5
dynamicSizeOf=5, 是指这个属性的数据长度是从另外一个对象成员 order=5中取的值

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

如果两个都标记,取值就不确定。造成混乱

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

正常情况下,数据定义会是:报文头, 长度, 可变数据体, 校验和

但是某些情况下,没有长度,而且数据体本身长度也是变长, 但是已知报文头和校验和长度固定,那么就可以标记为dynamicSize并且不影响解析。当然这是在数据体中没有其他变长的情况下。
也就是说一个数据体, 如果中间有且只有一段数据是变长的的, 那么我们可以根据其他固定的字节数,算出来这个动态数据的大小并解析,有则解析,没有就忽略,也就是即使是中间数据体没有,也不影响解析,这就是dynamicSize的作用。

但是如果数据定义是:报文头, 可变数据体1, 可变数据体2, 校验和
这种情况下,dynamicSize是无法工作的。因为无法推出可变数据体1和可变数据体2的分界位置。

不知道我这样说明白没有。

但是一个数据体,中间有个几段都是动态的, 那么你就不能不能使用dynamicSize, 因为你推不回去了。

from magic-byte.

xuelang2009 avatar xuelang2009 commented on July 28, 2024

我明白你的意思。你担心的是 动态计算数据有多个 、动态计算数据不在最后。
检测应该是: dynamicSize=true & order = 最后 | 其后面没有dynamicSizeOf标记了 ,这样是可以的。
1)《长度1、数据1,dynamicSizeOf=1》、《长度2、数据2,dynamicSizeOf=2》、《数据3, dynamicSize=true,size=?》这种情况下,应该是没有问题的。但是检测不过,说 dynamicSizeOf & dynamicSize 在类中(不是在同一成员属性上)不能同时存在。
2)《数据3, dynamicSize=true,size=?》 数据3的真实长度是 总长度-《长度1、数据1》- 《长度2、数据2》,但是数据3计算出的长度不是固定了,那么size = ? 我可以直接赋值 Integer.Max 吗? 对内存有影响吗?

from magic-byte.

xuelang2009 avatar xuelang2009 commented on July 28, 2024

`
@MagicClass
public class DynamicSizeWith2Field_test
{
@magicfield(order = 1, size = 10)
private String name;

//数据长度
@MagicField(order = 3)
private int len;
//数据value
@MagicField(order = 5, dynamicSizeOf = 3)
private ArrayList<Byte> boodsId;

//可变长度
//这个size,不确定最大多少,直接给最大值??????
@MagicField(order = 7, size = Integer.MAX_VALUE, dynamicSize = true)
private ArrayList<Byte> list;

`
比如这种定义格式

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

` @MagicClass public class DynamicSizeWith2Field_test { @magicfield(order = 1, size = 10) private String name;

//数据长度
@MagicField(order = 3)
private int len;
//数据value
@MagicField(order = 5, dynamicSizeOf = 3)
private ArrayList<Byte> boodsId;

//可变长度
//这个size,不确定最大多少,直接给最大值??????
@MagicField(order = 7, size = Integer.MAX_VALUE, dynamicSize = true)
private ArrayList<Byte> list;

` 比如这种定义格式

你对数据体预估的最大值,最好不要设置为MAX,序列化输出时会填充0

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

@MagicClass public class DynamicSizeWith2Field_test { @magicfield(order = 1, size = 10) private String name;

//数据长度
@MagicField(order = 3)
private int len;
//数据value
@MagicField(order = 5, dynamicSizeOf = 3)
private ArrayList<Byte> boodsId;

//可变长度
//这个size,不确定最大多少,直接给最大值??????
@MagicField(order = 7, size = Integer.MAX_VALUE, dynamicSize = true)
private ArrayList<Byte> list;

} 比如这种 定义模式

嗯,这种模式下dynamic理论可以推定的。
但是这种报文设计本来也是不标准,扩展性也不强,所以也就直接不支持了。
所有数据体应该都是有长度标识才行,即使是可变长度!!!

from magic-byte.

xuelang2009 avatar xuelang2009 commented on July 28, 2024

好的,感谢解答...有些协议定义的就是那么的不可思议..

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

好的,感谢解答...有些协议定义的就是那么的不可思议..

这种的话,目前只能通过自定义解析器来实现

from magic-byte.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.