Google ProtoBuff 获取、编译、使用示例

Google ProtoBuff入手

简介

    [Google Protocol Buffer](https://developers.google.com/protocol-buffers/)( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,他们用于 RPC 系统和持续数据存储系统。
    Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。
    简单来说就是ProtoBuffer可以将一个Object序列化成二进制数据进行传输与存储,同时可以将序列化的二进制数据反序列化为特定语言的Object。ProtoBuffer优点有:序列化、反序列化速度快,序列化的数据体积小,序列化的数据是二进制数据便于高效传输存储。

下载编译

java语言使用protobuffer需要两个文件

 1. protoc.exe    用于编译.proto文件生产对应语言的源代码
 2. protobuf-java.jar    java运行时依赖包

这两个文件都可以通过下载protobuffer源码进行编译得到
源码下载地址 https://github.com/google/protobuf

protoc.exe文件编译

 cd protobuf
 ./configure --prefix=$INSTALL_DIR 
 make 
 make check 
 make install

protobuf-java.jar需要用maven编译

cd protobuf/java
maven clean package

tobuf-java.jar也可以直接使用maven依赖

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>2.5.0</version>
</dependency>

如果本机没有编译环境可以直接下载已便宜好的程序
下载地址:
protoc.exe
http://repo1.maven.org/maven2/com/google/protobuf/protoc/
https://github.com/google/protobuf/releases

protobuf-java.jar
http://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/


开始使用

1. 定义编写.proto文件

使用protobuffer需要先定义好需要序列化和反序列化的数据结构。用一个.proto文件来描述:

例:userInfo.proto
定义一个User类 有ID Phone Email Sex等字段 1234代表字段在源码中的位置,也是唯一标识

package demo;  

message User  {  
  required int32 ID = 1;  
  required int64 Phone = 2;         
  required string Email = 3;    
  required bool Sex = 4;  
}

2. 编译.proto文件生产Java源码

将.proto文件和protoc.exe文件放入同一个目录,命令行进入该目录

protoc -I=./ --java_out=./ ./userInfo.proto

执行完成之后会在当前目录下生成一个java源文件 ./demo/UserInfo.java

3. 使用示例

将UserInfo.java拷贝到java工程,并protobuf-java.jar添加到classpath

编写测试代码:

public class Demo {

    public static void main(String[] args) throws Exception {

        UserInfo.User.Builder buider=UserInfo.User.newBuilder();
        buider.setID(12345).setPhone(13752526262L).setEmail("151221@qq.com").setSex(true);
        UserInfo.User info = buider.build();
        System.out.println("创建一个User对象\n"+info);

        System.out.println("\n将User对象序列化为字节数组");
        byte[] info_byte = info.toByteArray();
        System.out.println(info_byte);

        System.out.println("\n将User对象的序列化字节数组反序列化为java对象");
        System.out.println(UserInfo.User.parseFrom(info_byte));

    }

}

测试运行结果:

创建一个User对象
ID: 12345
Phone: 13752526262
Email: "151221@qq.com"
Sex: true


将User对象序列化为字节数组
[B@49c2faae

将User对象的序列化字节数组反序列化为java对象
ID: 12345
Phone: 13752526262
Email: "151221@qq.com"
Sex: true
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值