如何在不反序列化第一个

时间:2018-01-26 21:59:41

标签: protocol-buffers

我试图了解是否可以采用序列化的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 ,而无需先付费反序列化 内容

我试图在不反序列化的情况下注入 内容 的原因是,我正在尝试节省反序列化消息的开销。

如果答案是,不,那是不可能的。这仍然有用。

谢谢,迈克。

1 个答案:

答案 0 :(得分:1)

在protobuf中,子消息存储为bytes个字段。

所以你可以修改你的包装器的副本:

message WrapperContentBytes {
 required string metatData = 1;
 required bytes content = 2;
}

并将已经序列化的内容数据写入content字段。

解码器可以使用未修改的WrapperContent消息来解码子消息。线上的二进制数据将是相同的,因此解码器不知道差异。