Protobuf net Siralization/deserialization c与Linux c++; < >我通过TCP套接字在Windows C客户端和Linux C++服务器之间传递消息。C#代码使用protobuf net v2,Linux Google的protobuf版本。我传递的小测试对象有6个字段(Enum、Int、String)。我需要两个问题的帮助:
C#部分无法反序列化从Linux发送的数据,除非用作数据存储的内存流在构造函数中用二进制数组初始化。数组不能大于从Linux发送的数据(在我的情况下为9字节)。代码示例-byte[]data=新字节[9],将数据从套接字复制到数组中。 MemoryStream myStream=新建MemoryStream(数据),将myStream传递给序列化程序。反序列化。。。 如果我在没有字节缓冲区或1024字节数组的情况下初始化MemoryStream,反序列化将创建空对象,而不处理数据Protobuf net Siralization/deserialization c与Linux c++; < >我通过TCP套接字在Windows C客户端和Linux C++服务器之间传递消息。C#代码使用protobuf net v2,Linux Google的protobuf版本。我传递的小测试对象有6个字段(Enum、Int、String)。我需要两个问题的帮助:,c#,c++,linux,serialization,protobuf-net,C#,C++,Linux,Serialization,Protobuf Net,C#部分无法反序列化从Linux发送的数据,除非用作数据存储的内存流在构造函数中用二进制数组初始化。数组不能大于从Linux发送的数据(在我的情况下为9字节)。代码示例-byte[]data=新字节[9],将数据从套接字复制到数组中。 MemoryStream myStream=新建MemoryStream(数据),将myStream传递给序列化程序。反序列化。。。 如果我在没有字节缓冲区或1024字节数组的情况下初始化MemoryStream,反序列化将创建空对象,而不处理数据 当我尝试用与L
MemoryStream
或ProtoReader
,它占用更大的负载,但限制为虚拟长度。如果要发送多条消息,则需要知道有效负载的长度,这是不可避免的。这通常通过长度前缀实现。我希望这会抛出随机错误——很可能是“无效字段头0”——我想知道您是否接受了该异常嗨,马克。谢谢你的及时回复。我能够识别C++和C语言数据之间的差异的根源。C++没有使用默认值填充EnUM字段。我更关心C#中的反序列化。我曾计划使用预分配的缓冲区重用同一个流,但它不起作用。现在,我必须分配新的字节数组以匹配消息中数据的大小,并将其传递给MemoryStream构造。我希望消息的发送率很高,我描述的解决方案将导致频繁的垃圾收集。我可以重用ProtoReader以避免额外的分配吗?