Google protoBuf

时间:2022-11-04 20:57:18


前言:

最近app要做用户行为统计埋点,对数据进行序列化和反序列化实用Google提供的protoBuf,这里也简单的介绍一下

protobuf 已经更新到3.2.0 :查看blog下面资源包

Google protoBuf

依赖:

Win7+64位,android studio 2.3 gradle.build 2.2.3

Protobuf 主页:​​进入​​​
Protobuf win+java demo ​​​进入​

Mvn下载地址:​​进入链接​​​
Mvn安装步骤:​​​进入​​​
Protobuf源码:​​​进入​

定义:

protobuf,全称:Google Protocol Buffer,是Google开源的一种轻便高效的结构化数据存储格式,可以用于结构化数据的串行化,也称作序列化,主要用于数据存储或是RPC数据交换,支持多语言,可拓展。

安装步骤:

1.安装Maven环境(可以直接使用已经打好的jar,免去安装maven),具体安装过程,参考Mvn安装步骤部分
安装好Maven后,需要进行编译,才能生成需要引入的Jar文件,具体操作为:首先将下载好的protoc.exe文件复制到\protobuf-2.6.1\src目录下。然后进入protobuf-2.6.1\java目录下,直接运行命令:

编译完成后,会在\protobuf-2.6.1\java\target\目录下生成文件:protobuf-java-2.6.1.jar。可以直接导入Eclipse中进行使用,这里mvn环境安装异常,使用从网上down下的jar

2.下载

Google protoBuf


这里使用 protoc.exe 可执行文件。进行文件的生成

3.编写待处理文件,后缀名使用 .proto,语法遵循protobuf语法

4.Test.proto

package protobuf; 
option java_package = "com.sq.protobuf";
option java_outer_classname = "FirstProtobuf";
message testBuf {
required int32 ID = 1;
required string Url = 2;
}

说明:该文件中:

java_package:包名
java_outer_classname:类名
testBuf :对象名
required:必须有值
optional:可以不写值
string:相当于Java中的String
int32:相当于Java中的int

具体proto文件类型、Java类型及C++类型对比如下:

Google protoBuf

使用protoc进行编译,cm进入到protoc-2.5.0-win32文件中 语句为:

protoc –java_out=./test.proto

注:

protoc:指使用下载好的protoc.exe进行编译

java_out:编译器编译时,生成的语言同样的参数也可以是cpp_out

“=” 后边内容为需要编译的文件路径和文件名

编译完成后,会在编译文件位置相同的路径下,生成编译完成的文件,Java的以包的形式存放,即以文件夹的形式存放。

至此,已经完成了Jar包的编译和需要传输的对象的编译,接下来举例说明如何进行使用。

新建Eclipse 的java工程,当然android studio同样可以建立java工程

需要导入前面编译好的FirstProtobuf.java和protobuf-java-2.5.0.jar
进行编译和反编译测试

package test;

import org.omg.CORBA.Request;
import com.sq.protobuf.FirstProtobuf;

/**
* Protobuf 序列化反序列化例子 log:http://www.cnblogs.com/leehongee/p/3323784.html
*
* @author weichyang
*
*/

public class test2 {

public static void main(String[] args) {

FirstProtobuf.testBuf.Builder builder = FirstProtobuf.testBuf
.newBuilder();

builder.setID(125);
builder.setUrl("http://www.nuoyuan.cn");

FirstProtobuf.testBuf buf = builder.build();
byte[] buffer = buf.toByteArray();

System.out.println("进行序列化" + buf.toString());
// 反序列化

deSerialize(buffer);
}

public static void deSerialize(byte[] buffer) {

try {
FirstProtobuf.testBuf request = FirstProtobuf.testBuf
.parseFrom(buffer);
System.out.println("反序列化" + request.toString());
}

catch (Exception ex) {
System.out.println(ex.getMessage());
}

}

}

运行结果:

进行序列化ID: 125
Url: "http://www.nuoyuan.cn"
反序列化ID: 125
Url: "http://www.nuoyuan.cn"

Ok到这里protobuf的简单实用 已经完成。总的来说首次还是需要费一些时间进行环境配置的

demo下载: ​​http://pan.baidu.com/s/1jImfnd8​

protobuf 3.2.0 资源包: ​​http://pan.baidu.com/s/1hsMesoG​

引用: Protobuf语言指南
官方网站: ​​​https://developers.google.com/protocol-buffers/​