前言:
最近app要做用户行为统计埋点,对数据进行序列化和反序列化实用Google提供的protoBuf,这里也简单的介绍一下
protobuf 已经更新到3.2.0 :查看blog下面资源包
依赖:
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.下载
这里使用 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++类型对比如下:
使用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/