在c#中,我使用protobuf-net将字符串序列化为字节数组并通过网络发送
var bytes = Serializer.SerializeObject("Hello,world")
这个字节数组包含13个元素,包括2个前缀标记,以0x10开头,然后是字符串长度为0x0b。
我试图在java中反序列化,我使用ByteString将该字节数组转换为字符串,我得到了一个错误字符串:\ n你好,世界! 这意味着java不会忽略前缀标记。
有谁知道为什么? THX!
答案 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