protocol buffer使用简介

  之前在工作中用到了protocol buffer(此处简称PB)(主要对数据进行序列化与反序列化,方便网络传输中的编解码),之后发现这是一个好东西,在此稍微记录下该工具如何使用,方便以后查阅

  官网地址(需 翻 墙):https://developers.google.com/protocol-buffers/docs/downloads

  • 准备工作

  在工程中使用PB ,首先需要准备好PB运行时库文件(.jar)文件,和PB编译器(protoc.exe,用于自动生成代码)

  官网下载下来的PB源文件,需要编译打包成“.jar”文件,这样才能在之后的java工程中调用,此处介绍下打包PB源文件的 过程

    • 官网下载PB源文件和PB编译器程序(源文件和编译器版本必需一致)
    • 打包PB源文件生成.jar文件步骤

  下载下来的源文件解压后目录结构如下所示 :

  将解压得到的PB编译器“protoc.exe”拷贝到上图所示的“src"目录(必需执行该操作,否则之后的mvn操作会失败)

  进入上图所示的“java”目录,执行:mvn clean package,编译成功后便可在“target”目录下看见生成的.jar运行库文件。

至此打包生成库文件完成,之后便可调用生成的.jar文件。

  protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台,由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域,官网支持java、c++python,三种语言的实现。

  下面介绍一下PB如何使用 :

  • 首先 创建扩展名为.proto的文件(一个文件可定义多个message) ,例如 :  test.proto
message Login {
  required string account = 1;    //用户名
  optional string password = 2;   //密码,默认没有
  optional int32 version = 3;     //版本号码
  required string platform = 4;   //  “brew”
  required string device = 5;     // “HS001C”,后面可能需要区分手持机还是车机
  optional string meid = 6;       // meid字串
  optional uint32 expect_payload = 7 [default = 101];    //101指AMR,111是EVRC
}

message LoginAck {
  required int32 result = 1;   //-1代表失败,>=0 代表成功
  required User usr  = 2;
  required Configure conf  = 3;
  optional ServerInfo tcp_server = 4;  // TCP 服务器
  optional ServerInfo udp_server = 5;  // UDP 服务器
  optional ServerInfo update_server = 6; // 升级服务器
  optional uint32 cookie = 7; //随机种子
}

message QueryGroup {
  enum DetailLevel {
    ONLY_ID = 0;
    GROUP_INFO = 1;
  }
  required DetailLevel detail = 1 [default = GROUP_INFO]; //是只返回群组ID还是带群组名称的,默认是带名称的
  optional bool include_temp = 2 [default = false];  //是否包括临时群组,默认是不包括的
}

message QueryGroupAck {
  required int32 result = 1;    //-1:fail   >=0  succ
  repeated Group groups = 2;
}

  

        

        Scalar Value Types

    A scalar message field can have one of the following types – the table shows the type specified in the .proto file, and the corresponding           type in the automatically generated class:

  • 使用protoc.exe(网上可下载)编译器自动生成相应语言的代码

  命令行执行 : protoc.exe --java_out=./xxx.jar test.proto

          protoc.exe --java_out=./  test.proto

  • 使用生成的源码文件或jar文件

    • 序列化举例(将上面定义的Login序列化为字节数组) :
Login.Builder builder = Login.newBuilder();
builder.setAccount(userName);
builder.setPlatform("brew");
builder.setDevice("HS001C");
builder.setPassword(pwd);
Login login = builder.build();
byte[] loginBt = login.toByteArray();
    • 反序列化举例(将字节数组反序列化为LoginAck对象,方便获取对象中的值):
LoginAck loginAck = LoginAck.parseFrom(byteArray.getArray(byteArray.length() - 3));

int result = loginAck.getResult();

至此,PB使用基本介绍完成,下面贴出PB官网java 教程 :

时间: 2024-11-05 11:27:19

protocol buffer使用简介的相关文章

【Google Protocol Buffer】Google Protocol Buffer

http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格式.目前提供了 C++.Java.Python 三种语言的 API. 17 评论: 刘 明, 软件工程师, 上海交大电

Google Protocol Buffer 协议

1. Protocol Buffers 简介 Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可以使用该技术来持久化数据或者序列化成网络传输的数据.主要用于数据存储.通信协议等方面.现阶段支持C++.JAVA.Python.Objective-C.C#.Javascript等6种编程语言.Googel 公司 2015-12-31 更新了最新的版本Version 3.0.0-bet

Protocol Buffer 序列化原理解析 - 为什么Protocol Buffer性能这么好?

前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json.XML 真的强!太!多! 由于 Google出品,我相信Protocol Buffer已经具备足够的吸引力 今天,我将讲解为什么Protocol Buffer的性能如此的好: a. 序列化速度 & 反序列化速度快 b. 数据压缩效果好,即序列化后的数据量体积小 阅读本文前请先

Google protocol buffer 使用和原理浅析 - 附带进阶使用方式

Protocol Buffer ??Google Protocol Buffer又简称Protobuf,它是一种很高效的结构化数据存储格式,一般用于结构化数据的串行化,简单说就是我们常说的数据序列化.这种序列化的协议非常轻便高效,而且是跨平台的,目前已支持多种主流语言(3.0版本支持C++, JAVA, C#, OC, GO, PYTHON等). ??通过这种方式序列化得到的二进制流数据比传统的XML, JSON等方式的结果都占用更小的空间,并且其解析效率也更高,用于通讯协议或数据存储领域是非常

protobuf的简单应用,json和protocol Buffer的转换简单例子

Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格式.目前提供了 C++.Java.Python 三种语言的 API. 简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffe

转Google Protocol Buffer 的使用和原理

Google Protocol Buffer 的使用和原理 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式.它可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格式.目前提供了 C++.Java.Python 三种语言的 API. 2010 年 11 月 18 日 内容 简介 一个简单的例子 和其他类似技术的比较 高级应用话题 Protobuf 的更多细节 结束语 参考资料 评论 在

Google Protocol Buffer入门

简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件.他们用于 RPC 系统和持续数据存储系统. Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化.它很适合做数据存储或 RPC 数据交换格式.可用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的序列化结构数据格

protocol buffer相关

protocol buffer简介 protocol buffer全称Google Protocol Buffers,是google开发的一套用于数据存储,网络通信的协议编解码的工具库,与XML或者JSON相差不多,即把某种数据结构的信息,以某种格式(XML,JSON)保存起来,但是protobuf与XML和JSON不同在于,protobuf是基于二进制的.与XML和JSON的性能相别则是不言而喻的. 关于相关的性能对比可以看这里. protocol buffer版本比较 Protobuf目前为

Netty对Protocol Buffer多协议的支持(八)

Netty对Protocol Buffer多协议的支持(八) 一.背景 在上篇博文中笔者已经用代码演示了如何在netty中使用Protocol Buffer,然而细心的用户可能会发现一个明显的不足之处就是,我们的Handler只能处理一种特定的类型,而我们的项目中又不可能只有一种类型,那么这个问题该怎么解决了?多的不说,笔者直接上代码. 二.代码实现 2.1 message的编写 syntax = "proto2"; package com.rsy.netty.protobuf; op