最近公司项目中有埋点的需求,采用的是protocolbuffer的数据格式,所以去研究了protobuf的使用,在此记录一下
1.什么是protocolbuffer?
protocol buffer是google的一个开源项目,它是用于结构化数据串行化的灵活、高效、自动的方法,例如XML,不过它比xml更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。
2.使用
2.1下载protoc-2.4.1-win32.zip,http://download.csdn.net/detail/tiandiwuya/9792888
2.2下载 一个protobuf-Java-2.4.1.jar文件,http://download.csdn.net/detail/tiandiwuya/9792889
2.3.用记事本编写一个.proto文件:
如:我编写的是msg.proto
package protobuf;
option java_package = "com.sq.protobuf";
option java_outer_classname = "FirstProtobuf";
message testBuf {
required int32 ID = 1;
required string Url = 2;
}
option java_package = "com.sq.protobuf";
option java_outer_classname = "FirstProtobuf";
message testBuf {
required int32 ID = 1;
required string Url = 2;
}
将其放在与刚解压的protoc.exe同级目录中。
2.4使用如下命令编译这个文件:
2.5将生成的FirstProtobuf.java文件引入eclipse,把下载的protobuf-java-2.4.1.jar也引入工程protoc.exe --java_out./ msg.proto
2.6建立测试文件
public class test2 {
public static void main(String[] args) {
//序列化
FirstProtobuf.testBuf.Builder builder = FirstProtobuf.testBuf.newBuilder();
builder.setID(117);
builder.setUrl("bangde");
// testBuf
FirstProtobuf.testBuf info = builder.build();
byte[] result = info.toByteArray();
System.out.println("反序列化过程:"+result.toString());
//反序列化过程
try {
FirstProtobuf.testBuf testBuf = FirstProtobuf.testBuf.parseFrom(result);
System.out.println("反序列化过程:"+"\n"+testBuf);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
结果: