我知道二进制protobuf格式没有上下文(没有proto def),但尽管如此,我还是有一个需求,即能够将其反序列化为可以枚举和更改的ruby对象,然后将该对象反序列化回二进制protobuf格式。google protobuf的ruby文档和其他支持的语言相比真的很轻,所以不清楚这是否可能,或者如何去做。如果google protobuf库不是最好的选择,有没有更好的(支持所有protobuf版本的)?
zxlwwiss1#
不,protocol buffer wire format不是自描述的,没有模式文件,只能提取有限的信息。有protoscope,一种反编译器。它会显示你能从wire格式中得到多少信息,尽管它不是精确的。
mpgws1up2#
经过一段时间的实验,我发现我不能从Google库中得到我想要的东西,但是,连接协议是documented here,并且只使用了六种变量类型。最后,我创建了一个简单的类,它可以反序列化所有TLV,对于LEN类型,可以识别(并置换字符串),递归嵌入的消息,并跳过其他所有操作。
2条答案
按热度按时间zxlwwiss1#
不,protocol buffer wire format不是自描述的,没有模式文件,只能提取有限的信息。
有protoscope,一种反编译器。它会显示你能从wire格式中得到多少信息,尽管它不是精确的。
mpgws1up2#
经过一段时间的实验,我发现我不能从Google库中得到我想要的东西,但是,连接协议是documented here,并且只使用了六种变量类型。
最后,我创建了一个简单的类,它可以反序列化所有TLV,对于LEN类型,可以识别(并置换字符串),递归嵌入的消息,并跳过其他所有操作。