protobuf搭建环境,序列化示例
来源:互联网 发布:英语作文批改软件 编辑:程序博客网 时间:2024/06/09 01:20
编译安装
protobuf是google开源的一个序列化方案,根据google的benchmarking测试,各个方面的表现都非常不错。详细的可以参考下面的基准测试项目:
https://github.com/eishay/jvm-serializers/wiki
protobuf的使用很简单,但是,google被墙了,造成下载和搭建环境比较麻烦。我这里就来一个完整的处理过程,搭建按照这个步骤就能够简单的体验protobuf了。我本机的环境是ubuntu 14。可以参考。
下载源码
首先,从github上下载protobuf的源码,github的地址:https://github.com/google/protobuf
shell>git clone https://github.com/google/protobuf.git
编译异常处理
现在,我们基本上可以按照github上的编译步骤进行操作,但是,有两点需要注意
1.我们现在是使用的源码构建,必须切换到合适的release版本。
git taggit checkout v2.6.1
2.你会发现按照github上面编译,第一步就报错。
查看脚本的内容,它去下载一个google的gtest的东西,因为“众所周知”的原因,下载失败,造成不能生成configure文件。这个时候,可以手动去网络上下载这个zip包,解压,并且重命名为gtest。就可以继续编译了。
我的资源中上传了一个(由于写文章时,尚未审批,无法给出地址),大家可以自行下载,百度也很容易百度到。下面给出操作步骤
unzip gtest-1.7.0.zipmv gtest-1.7.0 gtest./autogen.sh
编译安装
经过上面的操作就能生成configure文件了。就可以按照github上面的步骤正常编译了
./configure --prefix=/usrmakemake checkmake install这个时候编译安装就已经完成了。
序列化demo
搭建一个maven项目
只需要一个简单的maven项目就行了,可以直接跳过archtype的选择。
在pom.xml中添加如下依赖
<dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>2.6.1</version></dependency>写一个schema文件,放置到包目录就可以。就是官方网站上的简单示例。
syntax="proto2";package tutorial;option java_package = "com.wu.protobuf";option java_outer_classname = "AddressBookProtos";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 AddressBook { repeated Person person = 1;}然后,就可以使用protobuf的编译器,生成对应的stub了。切换到项目的src/main/java目录
protoc --java_out=. com/wu/addressbook.protoeclipse中刷新项目源码目录就可以看到生成的文件了。
然后编写一个类进行测试。
package com.wu.protobuf;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import com.wu.protobuf.AddressBookProtos.AddressBook;import com.wu.protobuf.AddressBookProtos.Person;public class ProtocDemo { public static void Print(AddressBook addressBook) { for (Person person: addressBook.getPersonList()) { System.out.println("Person ID: " + person.getId()); System.out.println(" Name: " + person.getName()); if (person.hasEmail()) { System.out.println(" E-mail address: " + person.getEmail()); } for (Person.PhoneNumber phoneNumber : person.getPhoneList()) { switch (phoneNumber.getType()) { case MOBILE: System.out.print(" Mobile phone #: "); break; case HOME: System.out.print(" Home phone #: "); break; case WORK: System.out.print(" Work phone #: "); break; } System.out.println(phoneNumber.getNumber()); } } }public void serialize() throws IOException{//build messagePerson john = Person.newBuilder() .setId(1234) .setName("John Doe") .setEmail("jdoe@example.com") .addPhone( Person.PhoneNumber.newBuilder() .setNumber("555-4321") .setType(Person.PhoneType.HOME)) .build();AddressBook.Builder addressBook = AddressBook.newBuilder();addressBook.addPerson(john);//serialize to diskFileOutputStream output = new FileOutputStream("addressbook.pbd"); addressBook.build().writeTo(output); output.close();}public void deserialize() throws FileNotFoundException, IOException{AddressBook addressBook = AddressBook.parseFrom(new FileInputStream("addressbook.pbd")); Print(addressBook);}public static void main(String[] args) throws IOException {ProtocDemo demo=new ProtocDemo();demo.serialize();System.out.println("serialize to disk success!!");System.out.println("start deserialize......");demo.deserialize();}}右键,运行就能看到效果了!
0 0
- protobuf搭建环境,序列化示例
- Protobuf开发环境搭建
- IOS ProtoBuf 环境搭建
- protobuf开发环境搭建
- Eclipse搭建protobuf开发环境
- go的protobuf环境搭建
- Protobuf序列化协议
- protobuf序列化存储
- protobuf (序列化协议)
- 序列化protobuf
- protobuf序列化原理
- 关于数据序列化(1)protobuf 示例(目前不支持Java8貌似)
- 【Google Protobuf】windows下protobuf的环境搭建(一)
- Jackson--protobuf序列化积累
- C# Protobuf-Net 序列化
- google protobuf序列化原理
- Python 序列化之 ProtoBuf
- Protobuf 序列化协议详解
- Python 学习笔记之读写模式
- 第六周项目1(1)-深复制体验
- 欢迎使用CSDN-markdown编辑器
- Cast from pointer to smaller type 'int' loses
- android分包
- protobuf搭建环境,序列化示例
- C语言之结构体
- 类型/结构定义
- 灵活、易用、强大的TS切片和M3U8构建工具
- 使用Vitamio打造自己的Android万能播放器(12)—— 播放网络视频缓冲处理
- zoj3862 intersection[2015浙大校赛C题]
- mybatis中的日志配置
- 下雪了吗
- JAVA使用JeasyOPC读取OPC 服务器数据