csharp中的Protobuf ToByteArray和WriteDelimitedTo函数有什么区别?

问题描述 投票:0回答:0

所以我是csharp的新手,我需要使用protobuf+websocket与服务器通信(在go中实现)。我最初的实现看起来像这样

var command = new Command
            {
                //some fields
            }.ToByteArray();
_websocketClient.SendAsync(command);

在哪里

_websocketClient
使用websocket-sharp客户端。但是,在服务器端我无法从请求中解组字节并得到错误
proto: Command: illegal tag 0 (wire type 1)
。这是原型生成代码的错误。看起来我发送的字节不知何故无效。然后我切换到这个实现

using var ms = new MemoryStream();
command.WriteDelimitedTo(ms);
_websocketClient.SendAsync(ms.GetBuffer());

现在一切正常。所以看起来这是由结构序列化的方式引起的。但是我没有找到任何文档来解释 writeDelimitedTo 实际上做了什么以及它与 ToByteArray() 有何不同。有人可以向我解释导致我的第一次实施失败的区别是什么吗?非常感谢,非常感谢!

c# protocol-buffers memorystream
© www.soinside.com 2019 - 2024. All rights reserved.