初识protobuf(java)

来源:互联网 发布:xcode怎么编写python 编辑:程序博客网 时间:2024/06/15 03:43

  • 简介
    • maven
    • protoc-320-win32下载地址
      • 环境变量配置
      • 验证
    • eclipse 插件下载
      • 测试
        • proto文件
        • 生成Java对象命令
        • 测试代码
        • 输出
    • 参考文章

简介

protobuf 是google 开发一个款序列化传输协议,它独立于语言,独立于平台;目前它提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 进行数据交换快许多。

下面介绍使用的是目前最新版本: 3.2

maven

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

protoc-3.2.0-win32下载地址

http://download.csdn.net/download/zsj897897/9821364

环境变量配置

将protoc-3.2.0-win32 解压到某一文件夹,在环境变量path路径(我的是:D:\software\protoc-3.2.0-win32\bin)

验证

C:\Users\Administrator>protoc --versionlibprotoc 3.2.0

eclipse 插件下载

Eclipse Marketplace --> 搜索 "protobuf-dt" 安装"protobuf-dt-2.2.1"

测试

proto文件

syntax="proto3"; # 使用协议版本option java_outer_classname="SearchRequestEntity"; # 生成的.java 文件名称message SearchRequest {  # 最终对象名称同message 名称string searchString =1;int32 page_number = 2;int32 page_size = 3;}

生成Java对象命令

protoc.exe -I=proto的输入目录 --java_out=java类输出目录 proto的输入目录包括包括proto文件例如:C:\Users\Administrator>protoc -I=D:/develporDir/CODE/workspace/test-protobuf/src/main/java/com/jiazq/test/protobuf/proto --java_out=D:/develporDir/CODE/workspace/test-protobuf/src/main/java/com/jiazq/test/protobuf/entity  D:/develporDir/CODE/workspace/test-protobuf/src/main/java/com/jiazq/test/protobuf/proto/person-entity.proto

测试代码

package com.jiazq.test_protobuf;import com.jiazq.test.protobuf.entity.PersionEntity;public class PersionTest {    public static void main(String[] args) {        PersionEntity.Persion.Builder builder = PersionEntity.Persion.newBuilder();        builder.setEmail("281460530@qq.com");        builder.setOnline(true);        builder.setPassword("ricisung");        builder.setPhoneNumber("18320928860");        builder.setUserName("jiazq");        builder.setUserId(12345);        PersionEntity.Persion persion = builder.build();        System.out.println(persion.toString());        System.out.println("---------序列化开始----------");        for (byte b: persion.toByteArray()) {            System.out.print(b);        }        System.out.println();        byte[] byteArray = persion.toByteArray();        System.out.println("字节长度:" + byteArray.length);        System.out.println("字节长度:" + persion.toByteArray().length);    }}

输出

userId: 12345userName: "jiazq"password: "ricisung"email: "281460530@qq.com"phoneNumber: "18320928860"online: true---------序列化开始----------8-71961851061059712211326811410599105115117110103341650564952544853514864113113469911110942114956515048575056565448481字节长度:53字节长度:53---------反序列化开始-----userId: 12345userName: "jiazq"password: "ricisung"email: "281460530@qq.com"phoneNumber: "18320928860"online: true

参考文章

http://blog.csdn.net/antgan/article/details/52103966
0 0
原创粉丝点击