java&Protocol Buffers
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的更多相关文章
- Java使用Protocol Buffers入门四步骤
Protocol Buffers(简称protobuf)是谷歌的一项技术.用于将结构化的数据序列化.反序列化.经经常使用于网络传输. 这货实际上相似于XML生成和解析.但protobuf的效率高于XM ...
- Protocol Buffers java
Protocol Buffers https://developers.google.cn/protocol-buffers/ 一. 例 addressbook.proto. syntax = &qu ...
- Google Protocol Buffers和java字符串处理控制
大多数的操作码被从夜晚复制.懒得敲. 直接在源代码和测试结果如下. serabuffer.proto档.使用下面的命令来生成java代码. protoc -I=./ --java_out=./ ser ...
- Xml,Json,Hessian,Protocol Buffers序列化对比
简介 这篇博客主要对Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进行对比,Xml和Json的基本概念就不说了. Hessian:Hessian是一个轻量级的 ...
- Protocol buffers 介绍
Protocol buffers和mxl一样在序列化数据结构时很灵活.高效和智能,但是它的优势在于定义文件更小,读取速度更快,使用更加简单.目前protocol buffers支持C++.java和p ...
- protocol buffers的使用示例[z]
[http://blog.csdn.net/zhu_xun/article/details/19397081] protocol buffers的使用示例 如果不了解protocol buffers, ...
- 理解netty对protocol buffers的编码解码
一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力 ...
- Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南
Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南 约定:为方便书写,ProtocolBuffers在下文中将已Protobuf代替. 本指南将向您描述如何使用 ...
- Protocol Buffers(Protobuf)开发者指南---概览
Protocol Buffers(Protobuf)开发者指南---概览 欢迎来到protocol buffers的开发者指南文档,protocol buffers是一个与编程语言无关‘.系统平台无关 ...
随机推荐
- js中 map 遍历数组
map 方法会迭代数组中的每一个元素,并根据回调函数来处理每一个元素,最后返回一个新数组.注意,这个方法不会改变原始数组. 在我们的例子中,回调函数只有一个参数,即数组中元素的值 (val 参数) , ...
- Spring mvc中@RequestMapping 6个基本用法小结(转载)
小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...
- JPA查询语句(转载)
JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL是完全面向对象的,具备继承.多态和关联等特性,和hibernate HQL很相似. 查询语句的参数 JPQL语句支持两种方式的参数定义 ...
- 仿知乎程序 fragment的切换以及toolbar在不同页面下显示的menu不同
我们在看知乎的时候,你会发现,首页,发现,关注,收藏,草稿这五项,你在点击之后进入到相应页面之后,侧滑菜单还在,你左侧滑一下,这个侧滑菜单还在,而提问,左滑屏幕,这个页面就没有,有点像返 ...
- 【leetcode】Plus One (easy)
Given a non-negative number represented as an array of digits, plus one to the number. The digits ar ...
- balabalabala
[微分享]:种子不落在肥土而落在瓦砾中,有生命力的种子决不会悲观和叹气,因为有了阻力才有磨炼.
- August 23rd 2016 Week 35th Tuesday
The very essence of romance is uncertainty. 浪漫的精髓就在于它充满种种可能. And the uncertainty of life may be also ...
- August 17th 2016 Week 34th Wednesday
Life is painting a picture, not doing a sum. 生活就像是绘画,而不是做算术. I am too serious about digits. All what ...
- jquery学习笔记-----ajax
$(selector).load( url [,date] [,callback] ) url:请求页面的url地址 date:发送至服务器的key:value数据 callback:请求完成时的回调 ...
- BlueTooth: 蓝牙基础知识进阶——链路控制操作
转自:http://blog.csdn.net/augusdi/article/details/25887395 七链路控制操作 链路控制操作就是用来描述一个设备是如何加入piconet又是如何从一个 ...