当前位置: 首页 > 工具软件 > Protobuf-dt > 使用案例 >

初识protobuf(java)

姬庆
2023-12-01

简介

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 --version
libprotoc 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/workspac
e/test-protobuf/src/main/java/com/jiazq/test/protobuf/entity  D:/develporDir/COD
E/workspace/test-protobuf/src/main/java/com/jiazq/test/protobuf/proto/person-ent
ity.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: 12345
userName: "jiazq"
password: "ricisung"
email: "281460530@qq.com"
phoneNumber: "18320928860"
online: true

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

参考文章

http://blog.csdn.net/antgan/article/details/52103966

 类似资料: