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

news2025/6/9 7:38:13

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

效率与性能并存——离不开 Visual Studio Code 的前端开发与我

文章目录 📋前言🎯题外话:我与 VSCode 的那些事🎯VSCode 的强大之处🧩VSCode 的诞生🧩VSCode 的一些功能 🎯优与劣(简单小结)📝最后 📋前言 许久…

JVM 原理简介

JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点。 运行流程 我们都知道java一直宣传的口号是:一次编…

股票K线基础知识1

K线图 K线图是反映价格在某一时间周期内波动情况的图表,它由开盘价、收盘价、最高价、最低价四个要素构成,若当日收盘价高于开盘价,这表明价格处于上涨状态,此时K线图多用红色表示;若当日收盘价低于开盘价&#xff0c…

(转载)从0开始学matlab(第1天)—变量和数组

MATLAB 程序的基本数据单元是数组。一个数组是以行和列组织起来的数据集合,并且拥有一个数组名。数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,括号内是这个数据所对应行标和列标。标量在 MATLAB 中也被当作数组来处理——…

JavaScript实现输入文字,指定输出遍数的代码

以下为实现输入文字,指定输出遍数的程序代码和运行截图 目录 前言 一、实现输入文字,指定输出遍数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找; 2.…

Prometheus+Alertmanager+webhook-dingtalk实现钉钉告警

文章目录 一、前提准备及规划二、安装及启动2.1 Prometheus安装启动2.2 Node_export安装启动2.3 Alertmanager安装启动2.4 Webhook-dingtalk安装启动 三、配置及测试3.1 Webhook-dingtalk配置钉钉webhook地址3.2 Alertmanager配置钉钉告警3.3 Prometheus集成Alertmanager及告警…

基于Docker的深度学习环境部署以及WSL和linux镜像问题

基于Docker的深度学习环境部署 1. 什么是Docker?2. 深度学习环境的基本要求3. Docker的基本操作3.1 在Windows上安装Docker3.2 在Ubuntu上安装Docker3.3 拉取一个pytorch的镜像3.4 部署自己的项目3.5 导出配置好项目的新镜像 4. 分享新镜像4.1 将镜像导出为tar分享给…

android应用的一种图标隐藏

在Android10之前,应用程序通过调用PackageManager.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)函数来实现图标隐藏。 但是在android10之后,所有具有四大组件和需要申请…

C语言函数

C语言函数 一 函数的分类举例:*比较两个整数的大小**交换两个整数的值*(传地址) 二 参数实参形参 三 练习1.写一个函数判断一个数是不是素数2.写一个函数判断这一年是不是闰年3.写一个函数实现一个整型有序数组的二分查找4.写一个函数&#x…

两种方法教你在postman设置请求里带动态token

问题描述 在使用postman调试接口时,遇到一些需要在请求里加上token的接口,若token出现变化,需要手动修改接口的token值,带来重复的工作量,翻看postman使用手册后,我发现了两种方法可以解决这个问题。 01 …

自动化测试开发年薪30w+?我对自己的职业规划产生了质疑

咱们还是开门见山,今天我们主要讲这几个问题: 1-测试开发都干些啥? 2-为什么那么多公司都要招聘测试开发? 3-测试开发的薪资 一、测试开发是什么? 所谓测试开发,是用更为全面的技术手段来提高测试效率&…

java学习笔记——线程池、Lambda表达式

第一章 等待唤醒机制 1.1 线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。 比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源&#xff0…

小米刷机小白教程最新详细版

★本篇为线刷(以修补boot的方式刷入面具) 如果你用的是小米手机,想获取面具root,看这一篇就够了,即使你是小白 必应搜索醉里博客http://202271.xyz?xiaomi 原创不易,谢绝转载,如果本教程有帮…

Linux系统优化

一、系统启动流程 1.centos6 centos6开机启动流程,传送门 2.centos7启动流程 二、系统启动运行级别 2.1 什么是运行级别 运行级别:指操作系统当前正在运行的功能级别; [rootweb01 ~]# ll /usr/lib/systemd/system lrwxrwxrwx. 1 root root…

Linux指令2

目录 一、 more指令二、 less指令(非常重要)三、时间相关的指令四、cal指令五、find指令(非常重要)六、grep命令七、zip和unzip指令八、tar指令(十分重要)打包/解包,不解压它,直接看…

安卓开发 | 将Vue项目打包为app

知识目录 一、写在前面✨二、Hbuilder X准备💕2.1 Hbuilder X简介2.2 下载 三、打包💕3.1 获取dist目录3.2 新建5app3.3 替换文件3.4 编写manifast.json文件3.5 app云打包 四、总结撒花😊 一、写在前面✨ 大家好!我是初心&#xf…

Prompt learning 教学[案例篇]:文生文案例设定汇总,你可以扮演任意角色进行专业分析

Prompt learning 教学[案例篇]:文生文案例设定汇总,你可以扮演任意角色进行专业分析 1.角色扮演 行为Prompt写法“牙医”““我想让你扮演一名牙医。我会向你提供有关寻找牙科服务(例如 X 光、清洁和其他治疗)的个人的详细信息。…

linux下安装高版本的python

1、背景 本地系统有python2.7,python3.7,如果有需要,还要安装python3.8,在python安装的过程需要openssl。跟openssl的交互需要在编译的时候配置好。 2、安装步骤 通过whereis openssl 检查openssl是否存在,不存在需要安装openssl。 (1&…

MySQL --- 事务,索引

1. 事务 场景:学工部整个部门解散了,该部门及部门下的员工都需要删除了。 在部门表当中维护的是部门的相关信息,在员工表当中维护了员工的相关信息,在员工表当中有一个字段dept_id关联的就是部门表的主键。 操作: …

从C语言到C++⑨(第三章_CC++内存管理)详解new和delete+面试题笔试题

目录 1. C语言动态内存管理 1.1 C/C内存分布 1.2 C语言中动态内存管理的方式 2. C动态内存管理方式 2.1 new/delete操作内置类型 2.2 初始化new数组的问题 2.3 new 和 delete 操作自定义类型 3. operator new与operator delete函数详解 3.1 operator new与operator de…