ps: Protocol Buffers简称PB

PB 安装配置

  • 下载 PB: 在 PB 官网,下载最新版(或者其他版本)PB,这里为了与 Java 项目中的 PB Maven 依赖版本一致,使用 PB 2.5.0 版本。
  • 安装 PB:
    • 解压:tar zxvf protobuf-2.5.0.tar.gz,使用 cd 命令进入 protobuf-2.5.0 目录。
    • ./configure,通常建议加上 --prefix 参数来指定目录,例如:
      ./configure --prefix=/usr/local/Cellar/protobuf/2.5.0
    • make,如出现 make: Nothing to be done for all 错误提示,表示 PB 已经被编译好了,如需重新编译,可以先用 make clean 命令删除已经编译好的文件。
    • make check
    • make install
  • 设置环境变量: 编辑 /etc/profile,在文件末尾加入:
export PATH=$PATH:/usr/local/Cellar/protobuf/2.5.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Cellar/protobuf/2.5.0/lib

至此,PB已经成功安装完毕,可以使用 protoc --version 命令来验证是否安装成功,如果出现如下结果,则表示 PB 已经安装成功并且生效。

Intellij IDEA 安装 Protobuf 插件

通常我们在编写好 PB 文件之后,需要使用 protoc 来将 PB 文件编译成对应的代码,在命令行里面我们可以使用如下命令来生成对应的 Java 文件:

protoc --proto_path=src --java_out=build/gen src/myfolder

在 IDE 中编写 PB 文件之后,可以在指定 package 下一键生成对应的 Java 文件,方便对 Java 文件的管理。

Google Protocol Buffers support 就是有着上诉功能的 IDEA 插件。

  • 安装 PB 插件。进入 IDEA 设置中心,打开 Plugins,点击 Browse repositories,搜索 protocol buffer安装插件,如下图所示。安装好 PB 插件之后,需要重启 IDEA。

  • 配置路径。PB 插件安装完毕之后,需要为插件配置 PB 的编译路径,也就是在上一步中我们安装的 protoc

至此,IDEA PB 插件安装完成,下面介绍如何在项目中使用 PB 插件来快速生成 Java 文件。

Java PB Demo

  • 新建 Maven 项目,配置 PB 生成 Java 文件的目录:进入 Project Settings,填写 Output source directory,这里的目录就是项目的 Java source 目录。

  • 根据 PB 描述文件,生成 Java 文件。在 PB 文件中右键,从菜单中选择 Compile ‘person.proto’,就能生成对应的 Java 文件。

  option java_package = "first.proto";
  option java_outer_classname = "PersonModel";   message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
  }
  • 加入 Maven 依赖。在 pom.xml 文件中加入如下依赖:
  <dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>2.5.0</version>
  </dependency>

序列化

PersonModel.Person.Builder personBuilder = PersonModel.Person.newBuilder();

personBuilder.setId(1);

personBuilder.setName("***");

personBuilder.setEmail("xxx@163.com");

PersonModel.Person person1 = personBuilder.build();

   // 将数据写到输出流,如网络输出流,这里就用ByteArrayOutputStream来代替

ByteArrayOutputStream output = new ByteArrayOutputStream();

   person1 .writeTo(output);

反序列化 

  byte[] byteArray = output.toByteArray();

  // 接收到流并读取,如网络输入流,这里用ByteArrayInputStream来代替

ByteArrayInputStream input = new ByteArrayInputStream(byteArray);

PersonModel.Person person2= PersonModel.Person.parseFrom(input);

System.out.println("ID:" + person2.getId());

System.out.println("name:" + person2.getName());

System.out.println("email:" + person2.getEmail());

java&Protocol Buffers的更多相关文章

  1. Java使用Protocol Buffers入门四步骤

    Protocol Buffers(简称protobuf)是谷歌的一项技术.用于将结构化的数据序列化.反序列化.经经常使用于网络传输. 这货实际上相似于XML生成和解析.但protobuf的效率高于XM ...

  2. Protocol Buffers java

    Protocol Buffers https://developers.google.cn/protocol-buffers/ 一. 例 addressbook.proto. syntax = &qu ...

  3. Google Protocol Buffers和java字符串处理控制

    大多数的操作码被从夜晚复制.懒得敲. 直接在源代码和测试结果如下. serabuffer.proto档.使用下面的命令来生成java代码. protoc -I=./ --java_out=./ ser ...

  4. Xml,Json,Hessian,Protocol Buffers序列化对比

    简介 这篇博客主要对Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进行对比,Xml和Json的基本概念就不说了. Hessian:Hessian是一个轻量级的 ...

  5. Protocol buffers 介绍

    Protocol buffers和mxl一样在序列化数据结构时很灵活.高效和智能,但是它的优势在于定义文件更小,读取速度更快,使用更加简单.目前protocol buffers支持C++.java和p ...

  6. protocol buffers的使用示例[z]

    [http://blog.csdn.net/zhu_xun/article/details/19397081] protocol buffers的使用示例 如果不了解protocol buffers, ...

  7. 理解netty对protocol buffers的编码解码

    一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力 ...

  8. Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南

    Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南 约定:为方便书写,ProtocolBuffers在下文中将已Protobuf代替. 本指南将向您描述如何使用 ...

  9. Protocol Buffers(Protobuf)开发者指南---概览

    Protocol Buffers(Protobuf)开发者指南---概览 欢迎来到protocol buffers的开发者指南文档,protocol buffers是一个与编程语言无关‘.系统平台无关 ...

随机推荐

  1. Greedy:Paint Color(AOJ 0531)

    涂颜料 题目大意:在一个1000000*1000000的矩阵中放入几块木板,问你这些木板把矩阵划分成了几个区域?输入会给左下角和右上角的坐标,输入W==0且H==0结束. 这一题是书上的作业题,书上有 ...

  2. 为Kindeditor控件添加图片自动上传功能

    Kindeditor是一款功能强大的开源在线HTML编辑器,支持所见即所得的编辑效果.它使用JavaScript编写,可以无缝地与多个不同的语言环境进行集成,如.NET.PHP.ASP.Java等.官 ...

  3. jquery中使用event.target的几点

    jquery中使用event.target的几点 1.this和event.target的区别: js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事 ...

  4. jquery的基本事件大全

    ].name); });jQuery.getScript( url, [callback] ) 使用GET请求javascript文件并执行. $.getScript(”test.js”, funct ...

  5. 【网络】ssl与ssh

    ssh(安全外壳协议):百度百科 ssl(安全套接字):http://kb.cnblogs.com/page/162080/ https应用了ssl协议 ssh与ssl的区别:http://blog. ...

  6. <context-param>与<init-param>

    <context-param>的作用: web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件w ...

  7. ios的链式编程笔记

    1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数  > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...

  8. oracle TIMESTAMP日期相减

    select extract(day from inter) * 24 * 60 * 60 + extract(hour from inter) * 60 * 60 + extract(minute ...

  9. CLR via C#(04)- 本是同根生

    一.等值性——Equals()方法 有时候我们需要比较两个对象是否相等,比如在一个ArrayList中进行排序查找等操作时. System.Object提供了Equals()虚方法: class Ob ...

  10. JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)

    1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...