protobuf3.5.1使用的简单例子

前言

1. 什么是protobuf

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议数据存储等领域。

2.

- 平台无关,语言无关,可扩展;
- 提供了友好的动态库,使用简单;
- 解析速度快,比对应的XML快约20-100倍;
- 序列化数据非常简洁、紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10。

安装

MAC/OS 安装

1. 下载

https://github.com/google/protobuf/releases下载protobuf-all-3.5.1.tar.gz

2. 解压 tar xvf protobuf-all-3.5.1.tar.gz

3. 编译并安装

cd protobuf.3.5.1
./configure
make
make check
make install

4. 验证

protoc --version

protobuf3.5.1使用的简单例子

一个简单的例子

1. 创建 .proto 文件

syntax = "proto3";

package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos"; message Person {
string name = 1;
int32 id = 2;
string email = 3;
} message AddressBook {
repeated Person people = 1;
int32 id = 2;
}

2. 编译

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto

使用上面的命令格式生成编译很好的Java class文件

3. 创建Maven项目,添加pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>protobuftest</groupId>
<artifactId>protobuftest</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies> </project>

protobuf3.5.1使用的简单例子

项目的结构如上图所示。

4. 新建一个Test类来进行测试

package com.example.tutorial;

import java.io.IOException;

public class Test {
public static void main(String[] args) throws IOException {
AddressBookProtos.Person.Builder pbulider = AddressBookProtos.Person.newBuilder();
pbulider.setId(1);
pbulider.setName("jinhong");
pbulider.setEmail("1060951934@qq.com");
AddressBookProtos.Person person = pbulider.build(); AddressBookProtos.AddressBook.Builder builder = AddressBookProtos.AddressBook.newBuilder();
builder.addPeople(person);
builder.setId(1);
AddressBookProtos.AddressBook addressBook = builder.build(); System.out.println("before :" + addressBook.toString()); System.out.println("addressBook byte");
for (byte b : addressBook.toByteArray()) {
System.out.println(b);
} System.out.println(addressBook.toByteString()); byte[] byteArray = addressBook.toByteArray();
AddressBookProtos.AddressBook person2 = AddressBookProtos.AddressBook.parseFrom(byteArray); System.out.println("after: " + person2.toString());
}
}

测试的结果如下:

protobuf3.5.1使用的简单例子

通过上面的测试,我们简单了解了protobuf的使用。后续将继续深入了解protobuf的一些细节。

在学习的时候建议多了解下IDL(interface discription language)的概念,它是跨语言和平台的关键。

上一篇:Android必知必会--使用shape制作drawable素材


下一篇:[译]Mongoose指南 - 查询