偶然在项目中接触到游戏服务器的,游戏服务器与JavaWeb后台管理系统的数据交换,用的便是Google ProtoBuf,先来说下
什么是Google ProtoBuf:
protoBuf 是一种平台无关、语言无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。
是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。
文章中仅以 Java 语言、Windows 开发环境为基础…..
Google ProtoBuf 的使用顺序方法:
前期准备:请自行上网下载 Google ProtoBuf 所需要的压缩包,内含:
编译工具:protoc.exe
jar包:protobuf-java-2.5.0.jar
- 首先,需要定义好用于传输的数据属性以及类型,新建文件:person.info.proto,内容:
package person;
option java_package = "com.wqt.ProtocolBuf"; //输出包目录
option java_outer_classname = "Person_info"; //输出类名
message info{
required int32 id = 2;
required string str = 3;
optional int32 opt = 4; //可选属性,传输时此属性可以不传输
}
# 这里说下文件名称通常定义为: 包名.类名.proto
- 使用编译工具 protoc.exe 编译 .proto 数据文件:
cmd 下进入到 protoc.exe 所在目录,输入命令:
>protoc.exe --java_out=./ person.info.proto
./ 生成java文件的路径
person.info.proto 目标文件
建议目标文件放在与 protoc.exe 相同的目录下,等编译之后再拷进 Java 项目中.
# 编译之后将得到 java 类文件: Person_proto.java 将文件放进 Java 项目中即可使用.
- 在 java 类中使用自定义的数据结构,别忘了导入下载的 jar 包:
## 此处在 main 方法中演示使用过程 ##
// package.class
Person_proto.info.Builder builder = Person_proto.info.newBuilder();
builder.setId(58);
builder.setStr("wqt");
builder.setOpt(4); // 可选属性
Person_proto.info i = builder.build();
byte[] bytes = i.toByteArray(); // 将数据转换成字节数组
// 可用于远程服务传输、Socket之间传输、服务器之间的传输等等.
// 以下的 parseFrom(bytes); 方法接受数据,并解析成对应的数据结构
Person_proto.info ppi = Person_proto.info.parseFrom(bytes);
// 输出解析后的数据
System.out.println(ppi.getId());
System.out.println(ppi.getStr());
System.out.println(ppi.getOpt());
到此,便说完了 Google ProtoBuf 的简单使用过程,在使用过程中会发现它比 xml、json 的方式会更加灵活,而且传闻比 xml 小,快 20-200倍……………
初涉 Google ProtoBuf ,若有错漏,欢迎指出。