前言:

protobuf确实比JSON快很多倍,看下面的图就知道了。

环境:

win7 x64

eclipse 4.3

protoc-2.5.0

安装包下载:

https://code.google.com/p/protobuf/downloads/list

2.6+的版本已转到GitHub上,下载地址是:

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

1.生成jar包

下载ProtoBuf包和生成protobuf-2.5.0.jar文件。下载protoc-2.5.0-win32.zip和protobuf-2.5.0.zip,两个文件都解压缩,将protoc-2.5.0-win32中的protoc.exe文件拷贝到protobuf-2.5.0\src目录下,然后进入protobuf-2.5.0\java,执行 mvn install,编译完成后可以在protobuf-2.5.0\java\target目录中找到protobuf-2.5.0.jar文件。

2.建立eclipse项目

a.  protoc.exe 放在工程的根目录下面

b. protobuf-java-2.5.0.jar 放在lib下面

c.  新建一个文件夹proto存放proto文件

d. 在proto文件夹下新建一个文件msg.proto,写入以下内容:

option java_package = "com.jamesfen.protobuf";
option java_outer_classname = "PersonProbuf"; 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 CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
}
} message AddressBook {
repeated Person person = 1;
}

3.产生protobuf JAVA类

进入  cd E:/Git/myhadoop2.x/myhadoop2.x文件夹

执行:

protoc --java_out=./src/main/java   ./proto/msg.proto

在包package com.jamesfen.protobuf;下面会找到类PersonProbuf

4.序列化反序列化测试:

package com.jamesfen.protobuf;
import java.util.List;
import com.google.protobuf.InvalidProtocolBufferException;
import com.jamesfen.protobuf.PersonProbuf;
import com.jamesfen.protobuf.PersonProbuf.Person;
import com.jamesfen.protobuf.PersonProbuf.Person.PhoneNumber;
public class TestProtobuf { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
builder.setEmail("kkk@email.com");
builder.setId(1);
builder.setName("TestName");
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("011111").setType(PersonProbuf.Person.PhoneType.HOME));
Person person = builder.build();
byte[] buf = person.toByteArray();
try {
Person person2 = PersonProbuf.Person.parseFrom(buf);
System.out.println(person2.getName() + ", " + person2.getEmail());
List<PhoneNumber> lstPhones = person2.getPhoneList();
for (PhoneNumber phoneNumber : lstPhones) {
System.out.println(phoneNumber.getNumber());
}
} catch (InvalidProtocolBufferException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(buf);
} }

5. 输出:

TestName, kkk@email.com

131111111

011111

[B@472a2a50

6.demo源码下载

https://github.com/Bellonor/myhadoop2.x

版权声明:本文为博主原创文章,未经博主允许不得转载。

最新文章

  1. IBM Bluemix体验:Containers进阶
  2. K - Least Common Multiple
  3. 微信--获取access_token
  4. pythonyCool-moviepy
  5. ArrayList集合
  6. linux踢人命令 pkill踢人用法
  7. tungsten开机启动及进程开启停止
  8. Csharp实现快速排序
  9. 图片预览插件 fancyBox
  10. 黄聪:Microsoft Enterprise Library 5.0 系列教程(六) Security Application Block
  11. tableView的编辑
  12. docker的安装,升级,与删除(最新版)
  13. 4.4基于switch语句的译码器
  14. [NewCode 6] 重建二叉树
  15. redis实战笔记(10)-第10章 扩展Redis
  16. macOS &amp; SVN
  17. spark科普
  18. cocos2dx 3.0 +VS2013 环境搭建
  19. JSON.parse() 方法解析一个JSON字符串
  20. chrome更改缓存位置

热门文章

  1. CSS3 之 RGBa 可透明颜色
  2. 分布式事务_02_2PC框架raincat源码解析-启动过程
  3. RESTful 组件
  4. tag问题
  5. 简洁的Jquery弹出窗插件
  6. plsql Developer----plsql软件总结(待续更新)
  7. GXT4.0 BorderLayoutContainer布局
  8. el表达式对js方法的传值
  9. 开发环境入门 linux基础 (部分) 归档 压缩 Vi编译器 系统分区
  10. Python垃圾回收机制:gc模块