Code Monkey home page Code Monkey logo

Comments (15)

MisterChangRay avatar MisterChangRay commented on July 28, 2024

有的, MagicByte.structBytes 。 但是只能获取固定类型的字节数

参考:
https://github.com/MisterChangRay/magic-byte/wiki/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E6%96%B9%E6%B3%95

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

有的, MagicByte.structBytes 。 但是只能获取固定类型的字节数

参考: https://github.com/MisterChangRay/magic-byte/wiki/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E6%96%B9%E6%B3%95

那是否可以对带动态长度属性的对象填充数据后的长度进行支持呢?

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

有的, MagicByte.structBytes 。 但是只能获取固定类型的字节数
参考: https://github.com/MisterChangRay/magic-byte/wiki/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E6%96%B9%E6%B3%95

那是否可以对带动态长度属性的对象填充数据后的长度进行支持呢?

既然已经序列化了,直接获取字节数组长度不就是了吗

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

有的, MagicByte.structBytes 。 但是只能获取固定类型的字节数
参考: https://github.com/MisterChangRay/magic-byte/wiki/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7%E7%B1%BB%E6%96%B9%E6%B3%95

那是否可以对带动态长度属性的对象填充数据后的长度进行支持呢?

既然已经序列化了,直接获取字节数组长度不就是了吗

我有这种:对象有了,只需要长度不需要序列化成二进制的情况,因为我要长度提前准备做分片,然后重新填充头里的数据

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

但是有动态字段的话,不序列化也不能知道具体长度的啊。

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

但是有动态字段的话,不序列化也不能知道具体长度的啊。

是,但是可以直接算,就是固定长度的加被标记为 dynamicSizeof 的属性的值就是总长度,是需要的,否则我现在的情况是需要从整体长度里取动态长度的头(头里有实现 customConvert 的属性,所以长度不确定),我不得不先反序列化再序列化一下得出长度,再把长度和反序列化的值放倒 MResult 里,有点儿多此一举的感觉

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

那就是 MagicByte.structBytes他了,动态数据结构返回最小值

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

那就是 MagicByte.structBytes他了,动态数据结构返回最小值

那没有意义,我自己封装了一套框架,从业务系统传入 bean,我要先从 bean 里解出头,然后做别的操作,这个因为咱们框架可以直接从完整的二进制里解出最开始的头,但是我却不知道解出来用了多少字节,还要序列化回去才能知道,太多此一举了。但是MagicByte.structBytes ,动态数据结构返回最小值又和我实际长度不一致

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

报文头部不都是固定长度吗?
不过你可以自定义解析报文体,当调用自定义解析的时候会传入下一次解析位置,也就变相知道头有多大了。

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

报文头部不都是固定长度吗? 不过你可以自定义解析报文体,当调用自定义解析的时候会传入下一次解析位置,也就变相知道头有多大了。

不是固定的,因为我里面有个动态长度的 ip 字段,支持 ipv6 和 ipv4 所以长度是动态的。

“自定义解析报文体”这个是不是意味着我解析对象里封装一个 Header 和一个 Object body,然后对 body 做自定义解析,拿 nextIndex。

但是我的框架是可以对应多个项目的,不同项目头不一样,所以我 Header 也是 Object 类型,用自定义解析来操作的,自定义解析的时候 再调用 MagicBytes.pack 方法传入的类型是我通过注入我额外写的 getHeaderClazz 接口的实现类获取的,所以这个时候我调用 MResult.build 需要告诉咱这个框架我用了多少字节,这个目前就只能反序列化再序列化获取长度了,如果能直接计算就可以省掉序列化浪费的时间和内存空间

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

你们报文设计不会IP在报文类型前面吧

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

你们报文设计不会IP在报文类型前面吧

ip 就在私有协议的报文头里。

主要是因为封了一个通用协议对象,第一个属性是头,不同项目的头不一样,所以头的长度必须反序列化之后才能知道长度,但是 MResult 里要填长度,所以我不得不再反序列化回去,才能知道从全部数据中用了多少字节反序列化出的头

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

你们报文设计不会IP在报文类型前面吧

ip 就在私有协议的报文头里。

主要是因为封了一个通用协议对象,第一个属性是头,不同项目的头不一样,所以头的长度必须反序列化之后才能知道长度,但是 MResult 里要填长度,所以我不得不再反序列化回去,才能知道从全部数据中用了多少字节反序列化出的头

哥哥哥,看看这个问题

from magic-byte.

MisterChangRay avatar MisterChangRay commented on July 28, 2024

Mresult是自定义序列化的啊,既然是自己读的数据,读了多少肯定能知道啊。

如果你用框架的话,现在确实没有返回读取的字节数, 可以考虑后面新增一个方法:返回读取的字节数和对象

from magic-byte.

FULaBUla avatar FULaBUla commented on July 28, 2024

Mresult是自定义序列化的啊,既然是自己读的数据,读了多少肯定能知道啊。

如果你用框架的话,现在确实没有返回读取的字节数, 可以考虑后面新增一个方法:返回读取的字节数和对象

因为我是这么用的
image
先解了个头出来,但是头里是有动态长度字段的,所以这么解出来我不知道头用了多少字节。

希望新增一个方法:返回读取的字节数和对象,这个可以满足需求,返回类型感觉直接用 MResult 就行

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.