Google ProtocolBuffer(PB) 简介和实例

简介

  • ProtocolBuffer(PB) 是一种轻便高效的结构化数据存储格式,可以用于结构化数据的序列化。
  • 类似xml和json,但PB比前两者更高效和省空间,在移动开发中更为用户省流量。
  • PB如何做到更省流量的? 这得从它的编码方式来看,PB采用Zigzag 编码并充分利用Varint技术,从而实现二级制级的空间节省。

实例

  • 步骤一, 书写 .proto 文件,这里直接上google官方实例,并存储为addressbook.proto
package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}
  • 步骤二,编译 .proto 文件,用到PB配套的编译工具protoc,并生成java类
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
protoc -I=. --java_out=. addressbook.proto
  • 步骤三,应用生成的类,并做序列化和反序列化操作,依赖库protobuf-java-2.6.1.jar(且版本必须和上一步的protoc的版本一致)
//生成对象
        Person john =
                  Person.newBuilder()
                    .setId(1234)
                    .setName("John Doe")
                    .setEmail("[email protected]")
                    .addPhone(
                      Person.PhoneNumber.newBuilder()
                        .setNumber("555-4321")
                        .setType(Person.PhoneType.HOME))
                    .build();

        System.out.println(john.toString());

//序列化为二进制数组
byte[] johnbyte = john.toByteArray();

//反序列化(中间过程你可以认为是经过了网络传输,文件存储等)
//注意对比两个System.out的输出
        try {
            Person john2 = Person.parseFrom(johnbyte);
            System.out.println(john2.toString());
        } catch (InvalidProtocolBufferException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

扩展

  • 书写 .proto的细节
  • PB编码的算法
  • 基于PB协议升级注意事项等

下载

  • 下列地址提供了上述实例工程的完整下载,资源包含: protobuf-2.6.1.zip源码; protoc-2.6.1-win32; protobuf-java-2.6.1.jar; 一个序列化反序列化实例
  • 下载传送门

参考

时间: 2024-08-25 18:06:47

Google ProtocolBuffer(PB) 简介和实例的相关文章

Google ProtocolBuffer(PB) 简介和实例2-Wire的使用

Wire简介 轻量级的protocol buffers,针对移动设备的java库 (和protoc产生的代码相比较)由Wire生成的代码方法数量将大大减少,这将有助于android应用避免方法数65k的限制 使用方法 下载最近的wire jar包,目前最新的版本是wire-compiler-1.7.0-jar-with-dependencies.jar, github上有下载链接 编写 .proto 文件,这里直接采用上一篇介绍pb时用到的例子 编译 .proto 文件,用wrie生成java类

Google protocal buffer 简介及实例

简介 ProtocolBuffer(PB) 是一种轻便高效的结构化数据存储格式,可以用于结构化数据的序列化. 类似xml和json,但PB比前两者更高效和省空间,在移动开发中更为用户省流量. PB如何做到更省流量的? 这得从它的编码方式来看,PB采用Zigzag 编码并充分利用Varint技术,从而实现二级制级的空间节省. 实例 步骤一, 书写 .proto 文件,这里直接上google官方实例,并存储为addressbook.proto package tutorial; option jav

C# 使用google protocolbuffer协议

简介 google protocolbuffer,google 提供了三种语言的实现:java.c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件.由于它是一种二进制的格式,比使用 xml 进行数据交换快许多. 可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换.作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输.配置文件.数据存储等诸多领域. 以下介绍下C#使用protocolbuffer 下载 protobuf-csharp-port-2.4

Guava学习笔记:Google Guava 类库简介

> Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦.下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.googl

Linux守护进程简介和实例详解

简介 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. 下面是linux系统中常见的一些守护进程. amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源管理 Arpwatch:记录日志并构建一个在L

Vue框架简介,实例成员,事件,过滤器,文本、事件和属性指令

目录 Vue框架简介,实例成员,事件,过滤器,文本.事件和属性指令 什么是Vue 为什么要学Vue 如何使用Vue Vue实例成员 1.el: 实例 2.data: 数据 3.methods: 方法 Vue事件 面向对象js Vue过滤器 Vue指令 文本指令 事件指令 属性指令 Vue框架简介,实例成员,事件,过滤器,文本.事件和属性指令 什么是Vue vue框架:渐进式JavaScript框架 ? vue一个环境:可以只控制页面中一个标签,可以控制一组标签,可以控制整个页面,可以控制整个项目

Android入门:Handler简介与实例

转自:http://www.bdqn.cn/news/201303/8038.shtml 1.Handler简介 Handler 为Android操作系统中的线程通信工具,包为android.os.Handler. 与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列.Handler可以通过这两个队列来分别: 发送.接受.处理消息–消息队列: 启动.结束.休眠线程–线程队列: Android OS中,一个进程被创建之后,主线程(可理解为当前Activity)创建一个消息队列,这个消

Google Gson 使用简介

1.如何将数组转化为 json 串? 下面的例子中我们示例如何将一个数据转换成 json 串,并使用 Gson.toJson() 方法将数组序列化为 JSON,以及Gson.fromJson() 方法将 JSON 串反序列化为 java 数组. import com.google.gson.Gson; public class ArrayToJson { public static void main(String[] args) { int[] numbers = {1, 1, 2, 3, 5

Hibernate简介与实例

一.Hibernate简介 1.什么是Hibernate? Hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBatis,Nhibernate,Siena等等.并且Hibernate是一个开源的orm(Object relations mapping)框架,提供了查询获取数据的方法,用面向对象的思想来操作数据库,节省了我们开发处理数据的时间. 2.Hibernate的优点 1).使用简洁的hql语句(Hibernate query language).