0

我有两个原型,比如说

消息 1 和消息 2。

我会收到这些原始消息。我想序列化它们,但将序列化的字节附加到单字节数组中。这样做的正确方法是什么?

我的意思是从结果字节数组中,消费者应该能够反序列化这两条消息。我是否需要添加某种元数据,例如

Message1 -> 1
Message2 -> 2

然后,当我为单个序列化消息(在这种情况下为 Message1 和 Message2)获得的字节附加到某些东西时

结果 = [1] ,[消息 1 的字节数组的长度] [消息 1 的字节数组], [2], [消息 2 的字节数组长度], [消息 2 的字节数组]

然后发送字节数组。在消费者端,他们将读取第一个字节作为消息类型,第二个 4 个字节作为消息长度,并在此基础上读取第一个消息字节数组,依此类推。

如果我想将它们序列化为 json。我还需要进行某种编码吗?

也让我们简化问题。如果我必须在单个字节数组中添加同一消息的多个实例,那么理想的方法是什么?

4

1 回答 1

2

您正在考虑某种方案来指示数组中的哪些字节属于哪个消息以及每种消息类型是什么是正确的。Protobuf 线格式本身没有消息类型或长度划分。

但是,有一种选择。如果您有第三条消息是oneof前两条消息中的一条,而第四条消息是第三条消息的数组,那么您需要做的就是填充第四条消息类型。

message Message1
{
    ...
}

message Message2
{
    ...
}

message Message3
{
    oneof type
    {
        Message1 msg1 = 1;
        Message2 msg2 = 2;
    }
}

message Message4
{
    repeated Message3 messages = 1;
}

假设字节数组的发送本身不需要划分(即您不是通过套接字或其他字节流发送),您只需发送 Message4 即可。

于 2018-08-30T20:47:44.160 回答