使用 Protocol Buffer 交换数据
Protocol Buffer 是 google 开发的一个用于定义通信双方数据格式定义库,支持C++,C#,Dart,Go,Java,Kotlin,Python等编程语言。项目参考地址:https://developers.google.cn/protocol-buffers
1. Protocol Buffer 通过一个 .proto 文件,来定义通信内容的数据结构
proto 文件定义规范参考:https://developers.google.cn/protocol-buffers/docs/proto3
2. Protocol Buffer 通过编译 .proto 文件,生成各种语言的源代码(C# 对应 .cs 文件)
要把 .proto 文件编译成指定语言(C#)源代码,需要下载 proto 编译器,下载地址为:https://github.com/protocolbuffers/protobuf/releases/latest,访问太慢可采用镜像(github.com.cnpmjs.org)
下载文件列表中,下载指定的平台及版本:protoc-{版本}-{平台}.zip,eg. protoc-3.19.1-win64.zip
下载完成后,建议复制到 C:\Program Files\ 下,并在 PATH 中添加下级 bin 目录,然后命令行执行 protoc --version,查看是否安装成功
在命令行中,先进入(cd)到 .proto 文件目录,然后执行编译,详细的编译选项使用 protoc --help 查看
目前主要用到的 --csharp_out 即选择输出为 C# 代码并指定生成的 .cs 文件存放目录
eg. protoc --csharp_out=. rawdata.proto
3. 在项目中使用生成的源代码
在项目中包含编译器生成的 .cs 文件,编译项目会报错,此时需要通过 nuget 安装运行时
在 nuget 中搜索 Protobuf 并安装对应的版本即可,到此安装完成
4. 使用 Protocol Buffer
通过 proto 编译器生成的 cs 文件中,生成了对应结构的类,直接对类的属性进行赋值,即可设置通信的数据内容。
调用 WriteTo 接口把结构对象写入文件
1 2 3 4 5 6 7 | using ( var output = File.Create( "resultFile.dat" )) { using ( var cos = new Google.Protobuf.CodedOutputStream(output)) { rawdata.WriteTo(cos); } } |
通过 Parser.ParseFrom 解析文件生成结构对象
1 2 3 4 5 6 7 | using ( var input = File.OpenRead( "resultFile.dat" )) { using ( var cos = new Google.Protobuf.CodedInputStream(input)) { rData = Nts.Rawdata.Parser.ParseFrom(cos); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术