Protobuf——Windows系统下的【.proto】文件使用

4 篇文章 0 订阅
2 篇文章 0 订阅

一、什么是protocol buffers

        Protocol buffers是一个灵活的、高效的、自动化的用于对结构化数据进行序列化的协议,与XML相比,Protocol buffers序列化后的码流更小、速度更快、操作更简单。你只需要将要被序列化的数据结构定义一次(译注:使用.proto文件定义),便可以使用特别生成的源代码(译注:使用protobuf提供的生成工具)轻松的使用不同的数据流完成对这些结构数据的读写操作,即使你使用不同的语言(译注:protobuf的跨语言支持特性)。你甚至可以更新你的数据结构的定义(译注:就是更新.proto文件内容)而不会破坏依赖“老”格式编译出来的程序。

       Google Protocol Buffer(简称 Protobuf),Protocol Buffers 是一种与平台语言无关的序列化结构数据存储格式,可作为数据存储或 RPC 数据交换格式。总结优点有:

  • 效率高: 序列化速度比xml,json快20~100倍,序列化后,体积可缩小3倍左右,所以它的传输速度更快了
  • 使用简单安全: proto编译器自动实现序列化,传输过程中以十六进制字节传输,所以安全不怕黑
  • 跨平台: 支持java、c#、c++、go 和 python等语言,只需维护一个.proto文件,然后通过相应的编译器就可以对同一数据进行序列化(打包)和反序列化(解包)。

二、【.proto】文件→【.java】文件

1. 首先介绍如何编写后缀名为.proto的文件,通常我们使用proto文件来定义结构化数据,在protobuf的术语中结构化数据被称为Message,如 message person { required string name=1; required int32 age=2; optional string email=3;},同时良好的命名习惯可以让我们清晰的通过文件名了解文件的信息,文件名的命名规则如下:packageName.MessageName.proto。

2. 编写.proto的文件,此处文件名为protomsg.ptoto

syntax = "proto3";
/* 指定正在使用proto3语法,若不指定,protocol buffer compiler默认使用proto2语法 */

package tutorial; 

option java_package = "com.example.tutorial";    //java_package:指生成.java文件的包名
option java_outer_classname = "AddressBookProtos";    //java_outer_classname:指把.proto编译成.java后的文件名(即ProtoTest.java)

/*---------------- 类及其消息结构 ----------------*/

message Person{
    required string name = 1;     //required 修饰符表示name必须赋值(没有默认值)
    required int32 id = 2;
    optional string email = 3;    //optional 修饰符表示选择性赋值,如果在后面添加[dafault = xx],例如:optional string email = 3;[dafault = 0]表示默认值是0 
    //required和optional可以有默认值
    
    enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
}

3. 在 protobuf官网 找到Java版本的页面, 页面详细描述了通过Maven,Gradle等构建工具使用protobuf的方法,当然也提到了如何编译出.jar格式文件。

4. 在 release页面找到所需版本下载:此处使用编译器版本:

    protoc-3.6.1-win32.zip

5. 将protoc-xxx-win32.zip文件解压,解压后的bin目录下有protoc.exe,是用来把proto文件编译成目标语言(C++,Java,Python)的文本,是google protobuf定义的格式。

6. 将已经写好的文件名为protomsg.proto文件复制到bin目录下。

7. 在Windows下为google protobuf配置环境变量,熟悉java的朋友都知道环境变量的配置,下面简单说一下步骤:

    右击“这台电脑”-->“属性”-->“高级系统设置”-->“环境变量”-->修改“系统变量”Path的值即可。注意添加的Path值仅到bin目录下即可。

8. 将.proto文件转换为.java文件,打开cmd命令窗口,在cmd窗口执行以下命令:

    格式:protoc -I=【源地址】 --java_out=【目标地址】 【源地址】/xxx.proto

    此处生成时会以.proto文件里注明的java_package为路径生成,所以目标地址不必包含java_package及之后的路径

    例如:protoc -I=. --java_out=. ./protomsg.proto

    

9. 生成的.java文件,如图:

三、protobuf源码打成jar包

1. 在 release页面找到所需版本下载:此处proto-java源码使用版本:

    protobuf-java-3.6.1.zip

2. 将protoc-3.6.1-win32.zip解压之后,找到编译器文件protoc.exe, 拷贝到

     protobuf-java-3.6.1.zip解压之后生成的..\protobuf-3.6.1\src\目录里面。

3. 确保系统中已经安装了Maven工具, 打开cmd命令行工具 ,进入到..\protobuf-3.6.1\java\路径,执行下面的命令:

    mvn package

    编译时间大概一两分钟, 编译成功后,将在protobuf-3.6.1\java\core\target\目录下看到刚刚生成的**protobuf-java-3.6.1.jar**, 这个就是我们需要的。

4. 源码打成jar包的结果,如图:

    

四、使用

将生成好的.java文件放入工程,将jar包文件导入工程,即可使用。

 

扩展资料:

Protobuf3教程  https://blog.csdn.net/hulinku/article/details/80827018#Maps

Protobuf语法指南 https://colobu.com/2015/01/07/Protobuf-language-guide/

gRPC proto3语法指南 https://blog.csdn.net/lyjshen/article/details/52298003

资源下载地址  https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1

protocol buffers官网  https://developers.google.com/protocol-buffers/

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值