google protobuf库可以用来将一个未知的二进制protobuf序列化为一个ruby对象,然后再返回吗?

hivapdat  于 2023-01-25  发布在  Ruby
关注(0)|答案(2)|浏览(136)

我知道二进制protobuf格式没有上下文(没有proto def),但尽管如此,我还是有一个需求,即能够将其反序列化为可以枚举和更改的ruby对象,然后将该对象反序列化回二进制protobuf格式。
google protobuf的ruby文档和其他支持的语言相比真的很轻,所以不清楚这是否可能,或者如何去做。
如果google protobuf库不是最好的选择,有没有更好的(支持所有protobuf版本的)?

zxlwwiss

zxlwwiss1#

不,protocol buffer wire format不是自描述的,没有模式文件,只能提取有限的信息。
protoscope,一种反编译器。它会显示你能从wire格式中得到多少信息,尽管它不是精确的。

mpgws1up

mpgws1up2#

经过一段时间的实验,我发现我不能从Google库中得到我想要的东西,但是,连接协议是documented here,并且只使用了六种变量类型。
最后,我创建了一个简单的类,它可以反序列化所有TLV,对于LEN类型,可以识别(并置换字符串),递归嵌入的消息,并跳过其他所有操作。

相关问题