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 生成对应语言的 脚本

Protobuf 使用相关推荐

  1. 使用Protobuf文件一键生成Java类

    使用Protobuf文件生成Java类 .proto 文件生成 .java 参考 看了一篇文章:主题是 proto 先生成 desc,然后在用 FreeMarker 模板引擎来做代码自动生成了: .p ...

  2. 简单protobuf

    protobuf的数据类型,有最简单的那种数据类型,就是一个文件中,定义了一个message 可以在一个文件中定义两个message,两个message之间是没有关联的 可以在一个文件中,定义两个me ...

  3. google ProtoBuf开发者指南

    目录 1   概览 1.1   什么是protocol buffer 1.2   他们如何工作 1.3   为什么不用XML? 1.4   听起来像是为我的解决方案,如何开始? 1.5   一点历史 ...

  4. Ubuntu14.04上编译指定版本的protobuf源码操作步骤

    Google Protobuf的介绍可以参考 http://blog.csdn.net/fengbingchun/article/details/49977903 ,这里介绍在Ubuntu14.04上 ...

  5. Windows7上配置Python Protobuf 操作步骤

    1.  按照http://blog.csdn.net/fengbingchun/article/details/8183468 中步骤,首先安装Python 2.7.10: 2.  按照http:// ...

  6. 【C++】Google Protocol Buffer(protobuf)详解(二)

    代码走读:caffe中protobuf的详细使用过程 [一]proto文件,以caffe.proto中BlobShape为例 syntax = "proto2"; //指明prot ...

  7. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  8. protobufjs 命令执行_【原码笔记】-- protobuf.js 与 Long.js

    protobuf.js的结构和webpack的加载之后的结构很相似.这样的模块化组合是个不错的结构方式.1个是适应了不同的加载方式,2个模块直接很独立.webpack的功能更全一点.但如果自己封装js ...

  9. 在网络通讯中应用Protobuf

    Protobuf的设计非常适用于在网络通讯中的数据载体,它序列化出来的数据量少再加上以K-V的方式来存储数据,对消息的版本兼容性非常强:还有一个比较大的优点就是有着很多的语言平台支持.下面讲解一下如何 ...

  10. 连信的protobuf数据格式

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 连信里用到的protobuf结构." 在看本文之前,可以先进行一下回顾,之前已经对协议的框架进行了整体的介绍: 连信协议整体框架 ...

最新文章

  1. SMRT single molecular real time Sequencing
  2. Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误
  3. 销售员的四大重要素质
  4. Tableau实战系列浏览 Tableau 环境(八) -tableau文件类型、语言和区域设置以及图标
  5. HttpPost测试工具类,传递xml型文档
  6. Designing GANs:又一个GAN生产车间
  7. 随手练——HDU-2037 、P-2920 时间安排(贪心)
  8. HttpEntity.EMPTY属性代码示例
  9. 请求的安全信息不可用或无法显示
  10. java 多线程原理(一)
  11. python3.12答案_编程常见问题
  12. linux ksh教程下载,学习Linux中ksh的用法
  13. 交叉表 mysql_MySql交叉表
  14. 利用.jou文件将建筑shp文件导入Gambit方法
  15. android无线投屏到电视盒子,【沙发管家】如何把电脑视频投屏到智能电视/ 电视盒子上?...
  16. 2021最新Java JDK1.8的安装教程
  17. 给自己的心灵一把独到的标尺
  18. 三星s8怎么分屏操作_三星Z Fold 2 5G体验:用过才明白,这就是理想中的可折叠屏手机...
  19. 阿里云天池供应链大赛(一)
  20. 《富爸爸,穷爸爸》思维导图

热门文章

  1. 欧洲共同语言参考标准等级C1,欧洲共同语言参考标准详解
  2. 内存溢出和内存泄露的区别
  3. Windows 计划任务定时重启java服务
  4. react中html转换,React中的HTML转义写法
  5. 通关率不到0.1%的小游戏《羊了个羊》为什么这么火?
  6. Win8.1减少“为硬件保留的内存”的方法
  7. 为什么骁龙888只有2.84hz,870都有3.2hz?
  8. Day09_01_Dubbo教程之简介
  9. R和Rstudio的安装及R语言入门
  10. 案例:用户信息列表展示