gpt4 book ai didi

c++ - Protocol Buffer SerializeToArray : How to find which structure has been serialized

转载 作者:行者123 更新时间:2023-11-28 06:12:00 24 4
gpt4 key购买 nike

我正在使用 ProtoBuf 使用结构在客户端和服务器之间进行通信。我调用 SerializeToArray,然后将获得的缓冲区通过线路发送到另一端,我调用相同结构的 ParseFromArray 方法来取回结构中的值。它按预期工作。

但是,如果涉及多个结构并且我必须将它们中的任何一个发送到另一端。我不确定在另一端如何找出哪个结构已被序列化? (所以我可以调用它的 ParseFromArray 来获取值)

我能想到的解决此问题的一种方法是将所有结构的第一个再见保留为“ID 字节”。因此,当任何结构在缓冲区中被序列化时,我总是可以读取缓冲区的第一个字节来找出它是哪个结构。

但我不确定这是否是标准的做法,以及它是否适用于所有平台。

请问有人可以投光吗?

更新:

感谢 Kenton Varda 的提示。我决定使用 Oneof功能来实现这一目标。

最佳答案

最好的办法是使用 Protobuf's oneof declaration定义外部包装器类型,例如:

message MyMessage {
oneof value {
Foo foo = 1;
Bar bar = 2;
Baz baz = 3;
}
}

protobuf系统会确保foobarbaz中只填入其中一个,让你写一个切换这些。

请注意,此功能是 2.6 版中的新功能,第三方 Protobuf 实现可能尚未更新以支持它。但是,在这些第三方实现中,声明应该表现得像一组 optional 字段,仍然可用;只是您需要一系列 if/else 语句来检查 has_foo()has_bar()

关于c++ - Protocol Buffer SerializeToArray : How to find which structure has been serialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com