概念介绍

  Protocol buffers 是google公司的与语言无关、与平台无关的、可扩张的为序列化话结构数据,就像xml一样,办事更加的小巧、快速、简单。Protocol buffers 目前支持语言有Java,Python和C++。

为什么不用XML

  Protocol buffers在序列化结构数据方便比XML有很多的有点。Protocolbuffers

  • 更加简单
  • 比xml小3-10倍
  • 比xml快20-100倍
  • 比xml更少的歧义
  • 以编程方式生成数据访问类更加容易

前期准备(下载安装protocol buffers)

  官网地址:https://developers.google.com/protocol-buffers/

  由于google是被墙的,大家可以自行翻墙,这里推荐一个网站可以直接通过添加hosts方式实现翻墙(https://laod.cn/hosts/2016-google-hosts.html)

  下载地址:https://github.com/google/protobuf/releases/tag/v3.0.0

  下载  protobuf-java-3.0.0.zip和protoc-3.0.0-win32.zip

  下载完成之后将两个压缩包分别解压。

Eclipse安装protocol buffers dt插件

  help->install New software...

  install Xtext  地址:http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/

  isntall protobuf-dt  地址:http://junit.github.io/protobuf-dt/git/update-site/site.xml

  安装成功之后会出现如下图的一个菜单:

  配置说明如下图:

编译protobuf的jar包

  由于protobuf是通过maven管理的,并且只提供了源代码,需要自行执行打包。

  将protoc.exe文件拷贝到解压之后的protobuf-3.0.0\src目录下

  切换到protobuf-3.0.0\java目录下,执行mvn install

  

  安装成功之后如下图所示:

  

现在就可以开发protobuf项目了

1、添加protobuf依赖

    <dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.0.0</version>
</dependency>

2、编写person.proto文件

package proto;
option java_package="com.wjg.base.protobuf.bean";
option java_outer_classname = "PersonProto"; message Person{
required string name = ;
required int32 age =;
required string birthday = ;
required bool man = ; enum PhoneType{
MOBILE=;
HOME=;
WORK=;
} message PhoneNumber{
required string number=;
optional PhoneType type =[default = HOME];
}
repeated PhoneNumber phone =;
}

保存文件之后就会在com.wjg.base.protobuf.bean包下生成PersonProto类

现在就可以开始测试了新建junit测试类

/**
*
*/
package com.wjg.base.protobuf; import org.junit.Test; import com.google.protobuf.InvalidProtocolBufferException;
import com.wjg.base.protobuf.bean.PersonProto;
import com.wjg.base.protobuf.bean.PersonProto.Person; /**
* @author ghost
* @version 创建时间:2016年11月23日 下午5:23:59 类说明
*/
public class PersonProtoTest {
/**
* 测试序列化
*/
@Test
public void testSerialize() {
PersonProto.Person.Builder builder = PersonProto.Person.newBuilder();
builder.setAge(23);
builder.setBirthday("2016-11-23");
builder.setName("ghost");
builder.setMan(true);
builder.addPhone(Person.PhoneNumber.newBuilder()
.setNumber("010-34783871").setType(Person.PhoneType.MOBILE)); Person person = builder.build();
System.out.println(person.toString());
} /**
* 测试反序列化
*
* @throws InvalidProtocolBufferException
*/
@Test
public void testDeserialize() throws InvalidProtocolBufferException {
PersonProto.Person.Builder builder = PersonProto.Person.newBuilder();
builder.setAge(23);
builder.setBirthday("2016-12-23");
builder.setName("ghostman");
builder.setMan(true); Person person = builder.build();
Person newPerson = Person.parseFrom(person.toByteArray());
System.out.println(newPerson.toString());
}
}

项目结构如下图所示:

protobuf  java初体验已经结束。

参考资料如下:

https://developers.google.com/protocol-buffers/docs/javatutorial

https://github.com/google/protobuf/

http://www.cnblogs.com/ungshow/archive/2011/12/27/2303257.html

http://blog.csdn.net/caisini_vc/article/details/5599468

注:

发现一个封装了protobuf文件操作的步骤,可以直接使用java注解定义字段类型即可。github地址如下,有兴趣的可以自行研究:

https://github.com/jhunters/jprotobuf

protobuf初体验的更多相关文章

  1. google protobuf初体验

    最近在读别人代码的时候发现一个的东西,名字叫protobuf, 感觉挺好用的,写在这里,留个记录.那么什么是protobuf 呢?假如您在网上搜索,应该会得到类似这样的文字介绍: Google Pro ...

  2. protobuf(Protocol Buffers)java初体验

    因为项目须要所以简单的研究了下protobuf.我也是參照网上的博客,所以大部分内容我也就不反复造轮子了.首先protobuf介绍点击这里,使用介绍点击这里,使用demo看这里. 我个人的第一个样例也 ...

  3. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  4. RPC框架基础概念理解以及使用初体验

    RPC:Remote Procedure Call(远程服务调用) RPC是做什么的 通过RPC框架机器A某个进程可以通过网络调用机器B上的进程方法,就像在本地上调用一样. RPC可以基于HTTP或者 ...

  5. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  6. Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验

    Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...

  7. Spring之初体验

                                     Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...

  8. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  9. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

随机推荐

  1. jquery 获取日期时间

    获取JavaScript 的时间使用内置的Date函数完成 var mydate = new Date();mydate.getYear(); //获取当前年份(2位)mydate.getFullYe ...

  2. 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

    64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...

  3. html, xhtml和xml

    html, xhtml和xml 1.定义及特点: 1) html:Hyper Text Markup Language 超文本标记语言 是最早写网页的语言,但编码不规范,主要用于控制数据的显示和外观. ...

  4. MFC自绘控件不错的网站收集,不定时更新。

    找资料的时候,遇到好的网站收集起来,当时看看就忘记网址,下次再找又找不到,写下来才记得牢.欢迎大家留言,共同收集. 国外的: 1.codeproject https://www.codeproject ...

  5. 省市县三级联动(webFrom...DropdownList)

    编辑页面 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"&g ...

  6. memcached tomcat maven 学习记录

    2016.12.11 maven 快速搭建项目,只要有pom.xml文件配置好依赖 可以把项目切割(具体切割出来的块怎么用?) nginx 负载均衡  文件服务器 主要配置nginx.conf 文件 ...

  7. .NET Framework 框架的一些简单介绍

    20世纪90年代以来出现的3种典型的组件技术: 1)OMC(对象组件模型)的CORBA2)Microsoft的COM/DCOM3)Sun公司的JavaBeans 在2002年,微软发布了.NET框架的 ...

  8. Redis_DataType

    Redis_DataType.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,. ...

  9. Python全栈开发day6

    1. 简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引 ...

  10. 如何在cluster上跑R脚本

    R 是一个比较不错但是有时候操蛋的语言,不错是因为用着爽的时候真的很爽,操蛋是因为这种爽不是什么时候都可以的,比如说在cluster上批处理跑R脚本. 当然说这话有些在上面跑过的各种不服气,你丫傻逼吧 ...