.net core 中使用Google的protoc
1. Google ProtoBuf 在TensorFlow,Caffe等深度学习框架中,都有用到这种序列化方法,不同于json的是,ProtoBuf的存储是基于二进制的,这样的好处是能够大幅节省空间,对于需要网络传输的场景更为重要,但是这样也带来一个问题,基于字符串存储的json对于完全不懂得json格式的人也是可读取的,通过观察文件的结构,甚至可以写一些简单的处理程序,然而protobuf的文件根本无法通过其他方法正常读取.
2.准备工作 Visual Studio NuGet安装:Google.Protobuf和Google.Protobuf.Tools 最终要的是,要准备好.proto文件
3. 关于proto文件 使用ProtoBuf主要有两个操作,序列化和解序列化,这两个操作都需要协议描述文件也就是.proto文件,如果要使用protobuf存储自定义的数据,就要自己编写proto文件,如果要读取其他的ProtoBuf序列化文件,例如TensorFlow中的模型文件.pb,就要先知道要读取的ProtoBuf序列化文件的协议,也就是要获得对应的.proto文件,这是一个必须条件,没有对应的proto文件,就无法正确打开ProtoBuf序列化文件.
4. 使用步骤 4.1 安装Google.Protobuf和Google.Protobuf.Tools的Nuget包 4.2 在Google.Protobuf.Tools下找到编译工具protoc.exe 4.3 准备好协议描述文件xx.proto,需要注意的是,proto文件之间可以互相引用,要正常使用,必须把所有相关的proto文件都准备好. 4.4 生成解码器 建立两个文件夹,一个名为src,一个名为gen 把准备好的proto文件全部放到src中 运行命令:.\protoc.exe --proto_path=src --csharp_out=gen xx.proto 把所有的proto文件都生成一遍. 在gen文件夹中,会发现有等量的cs文件,这就是对应的解码器,我们要把他们放进自己的工程中. 4.5 打开安装了Google.Protobuf和Google.Protobuf.Tools的Nuget包的C#工程,把刚刚生成的解码器导入工程中.
5.关键代码 网络上有关C#和ProtoBuf 的文章比较混乱,大多数都不是基于Google的官方版本的,在这里我给出的建议是,使用官方的版本和API,这样不但能使用到最新的特性,还能保证读取的兼容性. protobuf项目地址 在release中下载C#版本,解压后,在CSharp/src文件夹中有一个解决方案,打开它,就能得到在C#下使用Google官方的protobuf的实现的方法,代码很长,此处不赘述.
6.友情提示 有的教程中使用到了CodeGen这个工具,这个项目已经很久不更新了,现在已经不支持protobuf3.0,大家最好不要使用,还有一些教程使用到了其他的Nuget包,我这里也不推荐使用,使用这些第三方包都需要进行一些额外操作,或者需要在编写协议描述文件是进行一些特殊标注,这在解读其他程序生成的proto文件时会遇到很大的问题,总之,使用官方的包和代码,就没有问题了,而且比较简单.具体的API,在protocol-buffers官网可以找到,全文地址请点击:https://blog.csdn.net/Angle_Cal/article/details/82821124?utm_source=copy
--------------------- 本文来自 安娜学姐 的CSDN 博客
实际使用时要在protoc.exe中打开cmd进行转化 (输入文中提到的命令注意文件地址不要错错了生成不了)
还要注意最最重要的一点一定不要在有命名为汉字的文件夹下使用否则永远都不会生成类,只会报找不到文件的错误
转载于:https://www.cnblogs.com/gaoliangchao/p/9699331.html
.net core 中使用Google的protoc相关推荐
- 如何使用Google Authenticator在ASP.NET Core中设置两因素身份验证
介绍 (Introduction) In this article, we are going to learn how to perform two-factor authentication in ...
- python缓冲区_如何在Python中使用Google的协议缓冲区
python缓冲区 When people who speak different languages get together and talk, they try to use a languag ...
- 在像Angular2这样的SPA应用中使用Google Analytics的方法
Angular2のようなシングルページアプリケーションでGoogleアナリティクスを使う方法 如何在像Angular2这样的SPA应用中使用Google Analytics? 试着调查了一下. 由于S ...
- 如何在.NET Core中为gRPC服务设计消息文件(Proto)
如何在.NET Core中为gRPC服务设计消息 使用协议缓冲区规范定义gRPC服务非常容易,但从需求转换为.NET Core,然后管理服务的演变时,需要注意几件事. 创建gRPC服务的核心是.pro ...
- 【gRPC】 在.Net core中使用gRPC
最近在学习.net core的微服务体系架构.微服务之间的通信常常通过gRPC进行同步通信,但是需要注意的是,大多数微服务之间的通信是通过事件总线进行异步通信.在微软介绍.net微服务体系架构的项目e ...
- ASP.NET Core 中的 User Agent 识别及搜索引擎爬虫鉴定方法
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等. 百度百科 在 ...
- 在ASP.NET Core中使用brotli压缩
Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比.据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZ ...
- 在 .NET Core 中使用 DiagnosticSource 记录跟踪信息
前言 最新一直在忙着项目上的事情,很久没有写博客了,在这里对关注我的粉丝们说声抱歉,后面我可能更多的分享我们在微服务落地的过程中的一些经验.那么今天给大家讲一下在 .NET Core 2 中引入的全新 ...
- 前端后台以及游戏中使用Google Protocol Buffer详解
前端后台以及游戏中使用Google Protocol Buffer详解 前端后台以及游戏中使用Google Protocol Buffer详解 0.什么是protoBuf 1.下载protobuf的编 ...
最新文章
- CentOS7部署ELK5.2
- 软件质量与测试 第4周小组作业
- 向大脑学习智能本质,探索通用 AI 的另一条可行路径
- 配置ASA 7.x to Router LAN−to−LAN IPsec Tunnel
- 考前自学系列·计算机组成原理·补码定点加减运算和溢出判断,浮点数的加减运算,原码的乘法
- Solaris9 Sparc下安装JDK6.0和tomcat6.0
- 【转】X分钟速成c++
- asp.net2.0密码强度验证
- lucene索引word/pdf/html/txt文件及检索(搜索引擎)
- pyplot输出的绘图界面中文乱码的解决方案
- Codeforces Round #434 (Div. 2)【A、B、C、D】
- 文件另存为时名称会改变_易经:人处在困境时,不要焦虑,改变固定习惯,就会迎来转机...
- 推荐系统实践:从多领域优化到AutoML框架
- 什么叫单模光纤_什么是单模单纤/双纤光纤收发器?二者有何区别?
- iOS CoreData (二) 版本升级和数据库迁移
- 【Nowcoder - 5670 B Graph】2020 牛客暑期多校训练营(第五场)【最小异或生成树、Boruvka 思想】
- MV178——我的心灵家园
- wps计算机打印双面输出,WPS轻松办公—-文档双面打印的两种方法
- Android adb shell启动应用程序的方法
- php关闭notice_屏蔽PHP默认设置中的Notice警告的方法
热门文章
- 修改安卓UA(User Agent)
- SushiSwap 的一周:TVL 新高突破 50 亿美金!Kashi 下周发布,上线 Coinbase _ 2020.3.8-3.14
- 有人物联网485转网口模块网口调试助手1035未知错误
- 产品分享:Qt鸿途电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0
- 动力环境集中监控系统的数据传输方式
- (三)二元查找树转换双向链表
- 服务器协议连接,服务器远程连接提示由于协议错误,客户端无法连接到远程计算机...
- 腾讯开源柠檬 Lemon
- 南邮数据结构实验三---图的基本运算及飞机换乘次数最少问题
- 微人事 star 数超 10k 啦!聊聊如何打造一个 star 数超 10k 的开源项目