Google ProtoBuf 初试

偶然在项目中接触到游戏服务器的,游戏服务器与JavaWeb后台管理系统的数据交换,用的便是Google ProtoBuf,先来说下

什么是Google ProtoBuf:
protoBuf 是一种平台无关、语言无关、扩展性好的用于通信协议、数据存储的结构化数据串行化方法。
是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。

文章中仅以 Java 语言、Windows 开发环境为基础…..

Google ProtoBuf 的使用顺序方法:

前期准备:请自行上网下载 Google ProtoBuf 所需要的压缩包,内含:
编译工具:protoc.exe
jar包:protobuf-java-2.5.0.jar

  1. 首先,需要定义好用于传输的数据属性以及类型,新建文件: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
  1. 使用编译工具 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 项目中即可使用.
  1. 在 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 ,若有错漏,欢迎指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值