如何在适当位置修改序列化的protobuf字节数组?

时间:2019-05-16 23:03:24

标签: protocol-buffers

考虑一条protobuf消息:

message DataMessage {
    int32 custId = 1;
    string uuid = 2;
    int32 version = 3;
    string firmName = 4;
    google.protobuf.Timestamp date = 5;
    int32 accountNo = 6;
    string firmName = 7;
    bytes payload = 8;
} 

我将其填充并将其编组为字节数组,并将其作为Kafka消息发布。所有这些都很棒。

现在要问的是:Kafka处理程序获取字节数组。我想做的是只修改字段2和3 ,而不必将字节数组解组为DataMessage,修改字段2和3然后将其编组为另一个字节数组,这样就可以Kafka发布到下一跳。字段3是一个字符串,但是是ISO格式的GUID。此处的修改不会增加或减少字段长度。

protob.Buffer似乎无助于此。似乎一次允许对单个字段进行编码/解码。

有效负载(字段8)的大小为99%,不会被修改。我想跳过所有的临时副本,并进行编组/取消编组工作以修改1%。

可能吗?我猜想我是否知道字段2和3的字节数组中的偏移量,可以使用就地修改字节...但这在某种程度上损害了封送字节的完整性。通过使用fixed32而不是int32可以使此操作更容易...因此,字节数组中的偏移量是一致的。

0 个答案:

没有答案