当前位置:网站首页>Protobuf 使用
Protobuf 使用
2022-04-23 06:28:00 【[奋斗不止]】
Protobuf 使用
Protobuf 概念以及干什么的就不在这里说了,看这篇文章的应该都了解了,不了解的可以自己查一下。
总共分三步
第一步:下载配置 Protobuf 环境
Protobuf github 下载链接
里面有各个版本的 package,记得要选 release,根据自己需求找到适合的版本
我这里使用的是 Protocol Buffers v3.0.0 Version 3.0.0链接
下拉找到 Assets 标签展开如下
我是在 Windows 系统上操作,所以我选择下载 protoc-3.0.0-win32.zip 解压后找到 bin 文件夹下面有个 protoc.exe,在环境变量 path 添加 protoc.exe 所在路径,然后打开 cmd 命令行 cd 到 protoc.exe 所在目录,然后输入 protoc --version 能正确显示 protobuf版本就 OK 了
第二步:使用Protobuf 生成对应语言使用的脚本
创建一个文件夹,在文件夹中新建 xxx.proto 文件,编辑如下 apc.proto
syntax = "proto3";
message ABC{
string name = 1;
string message_name = 2;
};
第一行 syntax = “proto3”; 指定你正在使用 proto3 语法
message ABC 指定一个类,类名是 ABC
*.proto 也可以相互引用,新建 ddd.proto 编辑如下
syntax = "proto3";
import "apc.proto";
message Npc
{
string damage = 1;
int32 range = 2;
ABC abc = 3;
};
import “apc.proto”; 意义:在 ddd.proto 中导入 abc.proto
可以在 ddd.proto 中使用 ABC 类了
开始生成对应语言 如 C++、C#、Java
生成 C++,命令行输入
protoc.exe -I=F:\Protobuf\proto --cpp_out=F:\Protobuf\Out F:\Protobuf\proto\apc.proto
-I=F:\Protobuf\proto 指定 *.proto 文件所在路径:注意:-I 是 横杠 和 大写字母 I
–cpp_out=F:\Protobuf\Out 指定导出的是C++ 文件,导出路径是F:\Protobuf\Out
最后 F:\Protobuf\proto\apc.proto 表示需要导出的是哪一个 .proto 文件
导出结果为一个.h 和一个 .cc 文件 apc.pb.cc apc.pb.h
生成 C# ,命令行输入
protoc.exe -I=F:\Protobuf\proto --csharp_out=F:\Protobuf\Out F:\Protobuf\proto\apc.proto
导出结果为一个 .cs 文件 Apc.cs
生成 Java,命令行输入
protoc.exe -I F:\Protobuf\proto --java_out=F:\Protobuf\Out F:\Protobuf\proto\apc.proto
导出结果为一个 .java 文件 Apc.java
执行三次,最终生成文件如下
第三步:项目中如何使用生成的 C++、Java、和 C#
我主要使用 C# 语言,需要在 Assets 下找到 C# 对应的 Package : protobuf-csharp-3.0.0.zip 或者 protobuf-csharp-3.0.0.tar.gz,这两个是一样的,我下载的是 protobuf-csharp-3.0.0.zip
下载 protobuf-csharp-3.0.0.zip 后解压,目录如下
按目录找到文件 protobuf-3.0.0\csharp\src\Google.Protobuf.sln
然后用 Visual Studio 打开 Google.Protobuf.sln
, 我用的是 VS2017
如下选择 Google.protobuf -> 鼠标右键 -> 生成
生成成功后会在如下路径:protobuf-3.0.0\csharp\src\Google.Protobuf\bin\Release\net45
三个文件 Google.Protobuf.dll ,Google.Protobuf.pdb , Google.Protobuf.xml
将这三个文件放入自己的工程,我是在Unity 中使用,需要放在 Plugins 文件夹中
同时需要将 第二步生成的 C# 文件 Apc.cs
当到Unity中一个脚本目录即可,
C#代码调用如下
void Start()
{
// 实例化对象
ABC aBC = new ABC();
aBC.Name = "123";
aBC.MessageName = "ABC";
// 将对象序列化为 byte 数组
byte[] byteData = Serialize(aBC);
// 反序列化,将 byte 数组 转换回 类对象
ABC ddd = Deserialize<ABC>(byteData);
Debug.LogError(ddd.Name + " " + ddd.MessageName);
}
// 序列化:将 protobuf 类对象转换为 byte 数组
public static byte[] Serialize(IMessage msg)
{
using (MemoryStream ms = new MemoryStream())
{
CodedOutputStream outPut = new CodedOutputStream(ms);
outPut.WriteMessage(msg);
outPut.Flush();
byte[] byteData = ms.ToArray();
return byteData;
}
}
// 反序列化:将 byte 数组 转换为 对应的 protobuf 类对象
public static T Deserialize<T>(byte[] byteData) where T : IMessage, new()
{
CodedInputStream stream = new CodedInputStream(byteData);
T msg = new T();
stream.ReadMessage(msg);
return msg;
}
注意:第三步需要根据自己的语言下载编译对应的 Package 和 使用 .proto 生成对应语言的 脚本
版权声明
本文为[[奋斗不止]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/LIQIANGEASTSUN/article/details/123667502
边栏推荐
猜你喜欢
Authorization server (simple construction of authorization server)
Dropping Pixels for Adversarial Robustness
Configure NPM
ABAP 实现发布RESTful服务供外部调用示例
使用flask时代码无报错自动结束,无法保持连接,访问不了url。
【NLP笔记】CRF原理初探
Authorization+Token+JWT
SAP PI/PO功能运行状态监控检查
Mongodb 启动警告信息处理
SAP pi / PO rfc2restful publishing RFC interface is a restful example (proxy indirect method)
随机推荐
踩坑日记:Unable to process Jar entry [module-info.class]
学会使用搜索引擎
SAP PI / Po rfc2restful Publishing RFC interface as restful examples (proxy indirect)
12. Constraints
系统与软件安全研究(二)
SVG中Path Data数据简化及文件夹所有文件批量导出为图片
Nacos / sentinel gateway current limiting and grouping (code)
keytool: command not found
new的实现
异步的学习
js之DOM学习获取元素
Online Safe Trajectory Generation For Quadrotors Using Fast Marching Method and Bernstein Basis Poly
MySQL isolation level
自己封装unity的Debug函数
NPM installation stepping pit
双面显示的shader
Use of command line parameter passing library argparse
js之什么是事件?事件三要素以及操作元素
Django uses MySQL database to solve error reporting
Mongodb 启动警告信息处理