我试图了解是否可以采用序列化的protobuf构成另一个protobuf的一部分并将它们合并在一起而无需反序列化第一个protobuf。
例如,给定一个protobuf包装器:
syntax = "proto2";
import "content.proto";
message WrapperContent {
required string metatData = 1;
required Content content = 2;
}
然后想象一下我们在下面得到 内容 的序列化版本(即 内容 即将到来来自远程客户端):
syntax = "proto2";
message Content {
required string name = 1;
required bytes payload = 2;
}
您是否知道我是否可以将序列化的 内容 注入 WrapperContent ,而无需先付费反序列化 内容 。
我试图在不反序列化的情况下注入 内容 的原因是,我正在尝试节省反序列化消息的开销。
如果答案是,不,那是不可能的。这仍然有用。
谢谢,迈克。
答案 0 :(得分:1)
在protobuf中,子消息存储为bytes
个字段。
所以你可以修改你的包装器的副本:
message WrapperContentBytes {
required string metatData = 1;
required bytes content = 2;
}
并将已经序列化的内容数据写入content
字段。
解码器可以使用未修改的WrapperContent
消息来解码子消息。线上的二进制数据将是相同的,因此解码器不知道差异。