protocol buffer的简单使用

protocol buffer是一个高效的结构化数据存储格式,用来结构化数据的序列化与反序列化。目前支持java、c++、Python

相对于json而言:

  数据量跟小

  其他的还没看出什么优势

下载地址:

protobuf-2.5,protoc-2.5.0-win32.zip

 

安装过程:

1、进入解压后的java目录,查看readme.txt

2、把protoc.exe放入到protobuf-2.5中的

3、运行mvn -test

 

编写protocol buffer需要以下三步

1、定义消息格式文件,以proto结尾

  

package tutorial;
option java_package = "com.example.tutorial";
option java_outer_classname = "PersonProtos";

message Person{
	required string name=1;
	required int32 id=2;
	optional string email=3;
	
	message PhoneNumber{
		required string number = 1;
		optional int32 type=2;
	}
	
	repeated PhoneNumber phone=4;
	
}

  

2、使用编译器生成java文件

  protoc --java_out=. person.proto

3、使用protocol buffer提供的api编写应用程序

package com.example.tutorial;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import com.example.tutorial.PersonProtos.Person;
import com.example.tutorial.PersonProtos.Person.PhoneNumber;

public class ProtocolBufferExample {
	public static void main(String[] args) {
		Person person = Person.newBuilder()
			.setName("zhengqun")
			.setEmail("717401115@qq.com")
			.setId(111)
			.addPhone(PhoneNumber.newBuilder().setNumber("15351506736").setType(1))
			.addPhone(PhoneNumber.newBuilder().setNumber("17751544242").setType(2))
			.build();
		
		FileOutputStream out = null;
		try {
			out = new FileOutputStream("example.txt");
			person.writeTo(out);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		FileInputStream in = null;
		try {
			in = new FileInputStream("example.txt");
			Person p = Person.parseFrom(in);
			System.out.println("person2:" + p);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				in.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}

  

 

posted on 2015-10-30 11:20  石头hah  阅读(363)  评论(0编辑  收藏  举报

导航