Protobuf-net3.2.8中的protogen.exe之使用

目录

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的用法,以后工作工可能用得到。