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是一个与编程语言无关‘.系统平台无关 ...
随机推荐
- 谷歌 Uncaught SecurityError: Failed to execute 'replaceState' on 'History 错误
今天在用sui mobil做一个内联页面的时候遇到了这个问题. 然而这个问题只出现在chrome浏览器中,在火狐中没有一点问题. 他说明的是一个安全问题,chrome中有了新的安全机制
- oracle,mysql对敏感,关键字等处理
oracle用"" 比如,处理字段中间有空格,
- 【数据结构】红黑树 C语言代码
连看带写花了三天,中途被指针引用搞得晕晕乎乎的. 插入和删除的调整过程没有看原理,只看了方法,直接照着写的. 看了两份资料,一份是算法导论第12-13章, 另一份是网上的资料http://blog.c ...
- validation验证器指定action中某些方法不需要验证
今天写代码时,遇到个问题,在一个输入数据的页面有一个按钮,单击会发出请求从数据库中取数据,在这里出现问题,单击该按钮,配置的validation起作用,该请求没有到达后台的action 点击按钮选择作 ...
- 一个servlet处理来自多个不同页面的请求!
例如有一个用户表,我们要处理 添加,删除 用户以及登录功能 对应的有add.jsp del.jsp login.jsp等 <body> <!-- login.jsp --> & ...
- asp.net 曲线图
public void draw(DataTable dt) { //取得记录数量 int count = dt.Rows.Count; //记算图表宽度 int wd = 80 + 20 * (co ...
- 3ds max 分离对象
转换为可编辑面片,将编辑环境设置为以下状态: 选中所需面片,分离
- Linux将Shelll输出写入到文件
&> 以覆盖的方式,写入文件 &>> 将输出追加到文件 将命令的正确输出与错误输出都放入文件. /dev/null,垃圾箱. 将无用输出放入垃圾箱. 命令>& ...
- (转)Ehcache 整合Spring 使用页面、对象缓存
Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...
- 浅析 - Storyboard / Xib
大家都知道纯代码写应用的成本是很高的,特别是涉及到UI界面的实现,相当耗费时间.之前自己写应用时有了解过Storyboard,也简单使用过,但随着最近深入了解它之后,发现自己低估了它的作用和影响力,因 ...