目录
protobuf是个好东西
遇到问题
顺便研究一下命令行程序如何调试
protobuf是个好东西
protobuf是一个轻量级的数据格式,相比json,它的数据量为json的1/3,且存储方式为2进制,并进行了压缩,序列化和反序列化更快,保密性更好,但易读性差,适用于在客户端与服务器通信消息传递,尤其是巨量信息时,我们需要学习它。
以下来自chatGPT的回答:
Protobuf(Protocol Buffers)是一种轻量级的数据序列化格式,它可以将结构化的数据转换为紧凑的二进制格式,从而实现高效的数据传输和存储。
下面是 Protobuf 数据量小的原因:
1. 二进制编码:与 XML 和 JSON 等其他数据序列化格式相比,Protobuf 使用二进制编码来表示数据。这意味着它不需要像文本格式那样使用大量的空格、换行符和标签来描述数据,从而减少了数据量的大小。
2. 数据压缩:Protobuf 可以将数据压缩成更小的二进制格式,以进一步减少数据传输和存储的大小。这个功能可以通过启用“压缩”选项来实现。
3. 无需额外的元数据:与 XML 和 JSON 不同,Protobuf 中不需要额外的元数据来描述数据。相反,它使用预定义的消息类型和字段来定义数据结构。这意味着 Protobuf 不需要为每个值添加标签和类型信息,从而减少了数据量的大小。
4. 代码生成:Protobuf 可以自动生成编解码器和相关的代码,这使得代码的体积非常小,而且不需要使用反射等机制。这些编解码器使用底层的二进制协议来快速地读取和写入数据。
因此,由于它使用二进制编码、数据压缩、无需额外的元数据和代码生成等技术,Protobuf 可以实现非常小的数据量,并且可以实现高效的数据传输和存储。
遇到问题
protogen.exe是一个Protobuf for .net的库,期中protogen.exe是一个命令行程序,在使用这个命令行程序时总是出错。我使用的是3.2.8版本。和1.x的命令行参数完全不一样了。
我们看上面的命令提示信息,根据这些信息,尝试了很多参数都是报错误,于是将源代码拉下来研究一下。
代码库地址为:
protobuf-net/protobuf-net: Protocol Buffers library for habitmatic .NET (github.com)
使用以下命令实现了将Person.proto转为Person.cs文件,并且Person.cs位于当前目录\cs
protogen Person.proto --csharp_out="cs"
来看看1.x的命令这样用:1.x提示很清楚,3.x的提示让人无从下手
protogen -i:input.proto -o:output.cs
现在来对照之前的提示信息,我觉得正常人都想不到命令行参数要这么写(或许我水平有限),这算是一个坑吗?
顺便研究一下命令行程序如何调试
新建一个【调试参数配置】
args先使用空格分割,再用=分割,左边是参数右边是值
了解了命令行args的用法,以后工作工可能用得到。