Protocol Buffers学习笔记 - Windows上搭建开发环境,开发Java序列化应用
2014-11-10 15:26
525 查看
Google Protocol Buffers (ProtoBuf)是Google开源的数据序列化工具/框架/方法,比使用XML更小、更快、也更简单高效。目前Hadoop, HBase等很多开源软件使用ProtoBuf作为序列化工具。官方网站: https://developers.google.com/protocol-buffers/
在Windows上搭建Protobuf Java实验环境需要如下软件:
1. MS Visual Studio C++ (编译protoc, optional)
2. JDK (编译Java源码)
3. Maven (build protobuf jar包)
第一步:下载源码及Windows下编译好的protoc.exe, 下载地址:https://developers.google.com/protocol-buffers/docs/downloads
如果你的Windows上安装了Visual Studio,就可以不用下载protoc.exe,可以用源码编译出protoc。博主的电脑上没有Visual Studio, 因此直接下载了protoc.exe
第二步:下载及安装Maven, Maven官网:http://maven.apache.org/
安装后将maven的bin目录设置到Window path环境变量下
第三步:编译protobuf jar包
将下载的protoc.exe放到src目录,然后进入java目录运行:
mvn package
在target目录下产生protobuf-java-2.6.0.jar
mvn install
将jar包安装到maven repository.
至此我们得到了开发protobuf Java应用需要的protoc.exe和protobuf-java-2.6.0.jar, 这是我们开发protobuf Java应用仅需要的2个文件。下面就可以开发应用了。
Protobuf Java应用开发
1. 创建项目
mvn archetype:generate -DgroupId=proto -DartifactId=ProtobufTest
并生成eclipse项目:
mvn eclipse:eclipse
然后用eclipse打开项目, 进入Eclipse, Import -> Existing Maven Projects
2. 创建proto文件
在proto包中创建文件addressbook.proto,内容如下:
3. 编译proto文件
进入proto目录运行:
protoc --java_out=..\ addressbook.proto
在generated目录下生成了AddressBookProtos.java
添加依赖到pom.xml中:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.0</version>
</dependency>
5. 测试写消息(序列化)
在proto包中创建如下Java类 AddPerson.java
添加一个命令行参数运行,运行后产生序列化文件。
6. 测试读消息(反序列化)
在proto包中创建如下Java类ListPeople.java
添加与写消息时相同的命令行参数,运行后显示刚刚写入的消息。
在Windows上搭建Protobuf Java实验环境需要如下软件:
1. MS Visual Studio C++ (编译protoc, optional)
2. JDK (编译Java源码)
3. Maven (build protobuf jar包)
第一步:下载源码及Windows下编译好的protoc.exe, 下载地址:https://developers.google.com/protocol-buffers/docs/downloads
如果你的Windows上安装了Visual Studio,就可以不用下载protoc.exe,可以用源码编译出protoc。博主的电脑上没有Visual Studio, 因此直接下载了protoc.exe
第二步:下载及安装Maven, Maven官网:http://maven.apache.org/
安装后将maven的bin目录设置到Window path环境变量下
第三步:编译protobuf jar包
将下载的protoc.exe放到src目录,然后进入java目录运行:
mvn package
在target目录下产生protobuf-java-2.6.0.jar
mvn install
将jar包安装到maven repository.
至此我们得到了开发protobuf Java应用需要的protoc.exe和protobuf-java-2.6.0.jar, 这是我们开发protobuf Java应用仅需要的2个文件。下面就可以开发应用了。
Protobuf Java应用开发
1. 创建项目
mvn archetype:generate -DgroupId=proto -DartifactId=ProtobufTest
并生成eclipse项目:
mvn eclipse:eclipse
然后用eclipse打开项目, 进入Eclipse, Import -> Existing Maven Projects
2. 创建proto文件
在proto包中创建文件addressbook.proto,内容如下:
package proto.generated; option java_package = "proto.generated"; 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; }
3. 编译proto文件
进入proto目录运行:
protoc --java_out=..\ addressbook.proto
在generated目录下生成了AddressBookProtos.java
添加依赖到pom.xml中:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.0</version>
</dependency>
5. 测试写消息(序列化)
在proto包中创建如下Java类 AddPerson.java
package proto; import proto.generated.AddressBookProtos.AddressBook; import proto.generated.AddressBookProtos.Person; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; class AddPerson { static Person newPerson() { Person.Builder person = Person.newBuilder(); person.setId(1); person.setName("Mike"); person.setEmail("mike@abc.com"); Person.PhoneNumber.Builder phoneNumber = Person.PhoneNumber.newBuilder().setNumber("12388888888"); phoneNumber.setType(Person.PhoneType.MOBILE); person.addPhone(phoneNumber); return person.build(); } public static void main(String[] args) throws Exception { AddressBook.Builder addressBook = AddressBook.newBuilder(); // Read the existing address book. try { addressBook.mergeFrom(new FileInputStream(args[0])); } catch (FileNotFoundException e) { System.out.println(args[0] + ": File not found. Creating a new file."); } // Add an address. addressBook.addPerson(AddPerson.newPerson()); // Write the new address book back to disk. FileOutputStream output = new FileOutputStream(args[0]); addressBook.build().writeTo(output); output.close(); } }
添加一个命令行参数运行,运行后产生序列化文件。
6. 测试读消息(反序列化)
在proto包中创建如下Java类ListPeople.java
package proto; import proto.generated.AddressBookProtos.AddressBook; import proto.generated.AddressBookProtos.Person; import java.io.FileInputStream; class ListPeople { // Iterates though all people in the AddressBook and prints info about them. 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()); } } } // Main function: Reads the entire address book from a file and prints all // the information inside. public static void main(String[] args) throws Exception { if (args.length != 1) { System.err.println("Usage: ListPeople ADDRESS_BOOK_FILE"); System.exit(-1); } // Read the existing address book. AddressBook addressBook = AddressBook.parseFrom(new FileInputStream(args[0])); Print(addressBook); } }
添加与写消息时相同的命令行参数,运行后显示刚刚写入的消息。
相关文章推荐
- cocos2d-x学习笔记01:VS开发环境windows平台搭建
- Object C学习笔记6-如何在Windows环境搭建Object C开发环境
- Object C学习笔记6-如何在Windows环境搭建Object C开发环境
- Go语言学习笔记(一) : 搭建Windows下的Go开发环境
- Lua学习笔记1:开发环境搭建(windows和linux)
- cocos2d-x 2.1.4学习笔记01:windows平台搭建cocos2d-x开发环境
- Spark2.x学习笔记:6、在Windows平台下搭建Spark开发环境(Intellij IDEA)
- 【Cocos2D-X 学习笔记】windows如何搭建Cocos2D-x开发环境
- Cocos2d-x学习笔记(一)——Windows开发环境和Android交叉编译环境搭建
- GTK+学习:概述 、搭建环境(Windows,Linux)、开发 收藏
- Android 学习笔记2---开发软件的常识&搭建开发环境(windows7)
- Objective C 学习心得 (一):--Windows下搭建objective C开发环境
- QT学习笔记----搭建Qt4.7.3嵌入式开发环境
- OK6410 Linux开发环境搭建--编译以及ubuntu的使用方法学习笔记
- Android入门学习笔记(二):Android开发环境的搭建
- Adroid学习笔记-入门资料以及V2.3系统开发环境搭建
- GTK 在windows上的学习笔记(搭建环境)。
- Android开发学习笔记(三)——基于Eclipse开发环境的搭建及HelloAndroid示例程序的创建
- Spring学习笔记(一)环境搭建和测试开发环境
- android开发笔记一:环境的搭建(windows下)