如何使用protobuf反序列化c#和java之间的字符串?

时间:2017-09-20 05:05:55

标签: protocol-buffers

在c#中,我使用protobuf-net将字符串序列化为字节数组并通过网络发送

var bytes = Serializer.SerializeObject("Hello,world")

这个字节数组包含13个元素,包括2个前缀标记,以0x10开头,然后是字符串长度为0x0b。

我试图在java中反序列化,我使用ByteString将该字节数组转换为字符串,我得到了一个错误字符串:\ n你好,世界! 这意味着java不会忽略前缀标记。

有谁知道为什么? THX!

1 个答案:

答案 0 :(得分:0)

protobuf格式不允许裸数据,因此protobuf-net解释Serializer.Serialize("Hello, world"),好像它是以下形式的消息:

message Foo {
    optional value = 1;
}

并且好像你曾经 - 在C#术语中 - 使用过:

Serializer.Serialize(new Foo { value = "Hello, world") });

0x10是字段1等的字段标记

如果您想在不知道架构的情况下检查编码消息的内部,此工具可能有所帮助:https://protogen.marcgravell.com/decode