一、ProtoBuf介绍

Protocol Buffers(又名 protobuf)是谷歌的语言无关、平台无关、可扩展的结构化数据序列化机制。他是Google 的数据交换格式,可用于网络通讯和数据存储。

Protobuf通过定义数据的结构,然后使用protoc工具生成的源代码(包括C#、java、C++、Python等),方便实现在各种语言中数据流的读取。

官方提供了如何使用 protobuf 的开发人员的教程:
https://developers.google.com/protocol-buffers/docs/tutorials

示例:https://github.com/protocolbuffers/protobuf/blob/master/examples

Protocol Buffers 的完整文档可通过以下网址获得:
https://developers.google.com/protocol-buffers/

二、protoc编译器

协议编译器是用 C++ 编写的,我们可以直接下载编译后的exe。

github上网址:https://github.com/protocolbuffers/protobuf

编译完成版本:https://github.com/protocolbuffers/protobuf/releases

protoc 64为下载地址:protoc-3.18.1-win64.zip
完整版下载地址:protobuf-all-3.18.1.zip

解压后bin目录下:protoc.exe可以根据定义的结构体,直接生成各语言的代码。

// 输出c#代码
protoc --csharp_out=./ telegram.proto   // 输出java代码
protoc --java_out=./ telegram.proto

三、.proto文件

protobuf 需要定义一个数据结构的描述文件,用来说明数据的内容。

如下,是官网的一个例子:

syntax = "proto3"; // proto3 必须加此注解message SearchRequest {string query = 1;int32 page_number = 2;int32 result_per_page = 3;enum Corpus {UNIVERSAL = 0;WEB = 1;IMAGES = 2;LOCAL = 3;NEWS = 4;PRODUCTS = 5;VIDEO = 6;}Corpus corpus = 4;
}

上面是定义的一个message。包含:
String 类型的 query,编号是 1
int 类型的 page_number,编号是 2
枚举类型的 corpus

四、C#、java使用

简单使用如下:

C#例子

 // 定义对象,复制Telegram data = new Telegram ();data.UserCode = 76157;data.Status = RunStaus.Loaded;// 计算大小int size = data.CalculateSize();Console.WriteLine(size);// 输出对象到文件FileStream fso = new FileStream("test.data", FileMode.Create);data.WriteTo(fso );fsfso Close();// 读取文件生成对象FileStream fsi = new FileStream("test.data", FileMode.Open);Telegram data2 = new Telegram ();data2.MergeFrom(fsi );fsi .Close();

Java例子

 Telegram data= Telegram.newBuilder().setUserCode(1).setStatus(RunStaus.Loaded);// 输出对象到为Byte数组for(byte byte : data.toByteArray()){System.out.println(byte);}// 转化Byte数组为对象Telegram data2= null;try {data2= Telegram.parseFrom(data.toByteArray());} catch (InvalidProtocolBufferException e) {e.printStackTrace();}System.out.println(data2.toString());

初识ProtoBuf(3.18.1)相关推荐

  1. 【ProtoBuf】1.初识ProtoBuf

    ------------每一个不曾起舞的日子都是对生命的辜负. 初识ProtoBuf 一. 序列化概念 二. ProtoBuf 1. 什么是ProtoBuf 2. ProtoBuf的特点 3. Pro ...

  2. PHP probuf详细步骤_初识protobuf和php的相关用法

    前言 大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施.开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无 ...

  3. 初识Protobuf协议

    本文作为Protobuf入门学习的第一篇文章,将简单介绍Protobuf协议以及如何使用Protobuf来实现序列化与反序列化. 原文地址:https://mp.weixin.qq.com/s/QbL ...

  4. 初识 Vue(18)---(非父子组件间的传值)

    非父子组件间的传值 常一个应用会以一棵嵌套的组件树的形式来组织:将一个大组件进行拆分 下图这种情况的组件间传值(父子组件间传值) 方法:父组件通过 Props 向子组件传值,子组件通过事件触发向父组件 ...

  5. 冰冰学习笔记:简单了解protobuf

    欢迎各位大佬光临本文章!!! 还请各位大佬提出宝贵的意见,如发现文章错误请联系冰冰,冰冰一定会虚心接受,及时改正. 本系列文章为冰冰学习编程的学习笔记,如果对您也有帮助,还请各位大佬.帅哥.美女点点支 ...

  6. ubuntu16.04配置py-faster-rcnn

    在ubuntu16.04下编译安装了py-faster-rcnn. 如果你发现本文写的有不对或不清晰的地方,还请在文末留言指出,谢谢! 主要步骤包括:安装cuda/cudnn,换apt源,装开源显卡驱 ...

  7. Unity基础学习路线

        Unity基础 C#程序设计 第001课初识unity 第002课初始unity场景树_渲染体系_物理体系 第003课初识Unity C#的基本结构_类_成员_类的函数 第004课Unity ...

  8. 计算机硬件的组成、python的开发层面及语法介绍

    一.计算机硬件的组成 计算机硬件大体由CPU(中央处理器).内存.硬盘.输入输出设备.及把他们组为一起的主板构成. 二.python开发实在哪个层面开发 python开发是以计算机硬件为基础,在win ...

  9. 《k3s 源码解析4 ---- k3s重要数据结构》

    k3s完全兼容k8s,我解释一下是为什么: 因为k3s的底层数据结构(写入etcd/mysql/sqlite/dsqlite数据库的格式),是完全照搬k8s的数据结构.api完全兼容. 对外表现相同, ...

  10. Go语言开发k8s-04-Service操作

    文章目录 1. 结构体 1.1 ServiceList 1.2 Service 1.3 TypeMeta 1.4 ObjectMeta 1.5 ServiceSpec 1.6 ServiceStatu ...

最新文章

  1. GLFW--Getting started
  2. mysql中的notin
  3. 异常机制及throw与throws的区别 (z)
  4. DDD领域驱动之干货(二)
  5. 【MM模块】MRP Running — Lot Size 批量大小
  6. git按照tag拉取代码_Git实操小课堂
  7. python1011无标题_讲解:Python:COMP1011 Programming For The WebPython
  8. java des加密解密_Java实现的DES加密解密工具类实例
  9. oracle指定过个时间点 job_SQL SERVER 快速恢复:生成指定时间点的恢复脚本
  10. React Native(四)——顶部以及底部导航栏实现方式
  11. WIN10 安装Eplan 2.7 没有可激活合适的加密狗 的异常解决办法
  12. acrobat支持日文粘贴复制
  13. 【C++初阶:STL简介】
  14. 运营方法 - 运营的思考方法
  15. win10无法打印网页:打印机遇到异常配置问题0x8007007e 的解决方法
  16. 设计师常用的素材网站有哪个推荐
  17. 大型web系统数据缓存设计
  18. java 微信定位到市_java 微信公众号地理位置获取
  19. 随机种子 seed()到底是怎么回事。
  20. 网站性能优化之CSS无图片技术

热门文章

  1. 分享CodeIgniter上传图片成功的全过程
  2. javascript基础知识系列:eval()
  3. ASP.NET20 自定义配置节学习笔记(一)
  4. Windows基本的数据类型
  5. .NET Core 2.1 Preview 2带来网络方面的改进
  6. JS鼠标捕获DIV内选中的坐标和宽高
  7. 1.亿级流量的电商网站---概述
  8. 43.访问控制过滤器(Access Control Filter)
  9. 12. 程序扩展性(高级特性)
  10. Base64,DES,RSA,SHA1,MD5 笔记