protobuf入门

1.背景

2.环境安装

2.1.编译器安装

   a.下载编译器

  地址:https://github.com/protocolbuffers/protobuf/releases

  选项如下(根据不同的编译环境选择)

  

  b.配置环境变量

  解压后包结构如下:

  

   将路径配置到path路径下:

  

   c.检查配置是否正确

  

   编译环境配置完成.

 2.2.开发环境

  根据官方文档在项目中引入protocol buffer依赖包

  

dependencies {
    compile(
            "com.google.protobuf:protobuf-java:3.9.2",
            "com.google.protobuf:protobuf-java-uti:3.9.2"
    )
}

3.简易demo

  项目结构:

  

3.1.编写proto文件

//Student.proto是文件名
//协议名称
syntax = "proto2";
//包名,通常与java_package一样
package com.wfd360.demo06;
//optimize_for是文件级别的选项,Protocol Buffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME。缺省情况下是SPEED。
//SPEED: 表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。
option optimize_for = SPEED;
//类的包名
option java_package = "com.wfd360.demo06";
//类名
option java_outer_classname = "MyDataInfo";
//内部类名称
message Person {
    optional string name = 1;
    optional int32 age = 2;
    optional string address = 3;
}
//执行如下命令生成java代码
/*D:Program Filesprotoc-3.9.2in>protoc
    --java_out=E:workroomstudy
ettysrcmainjava
    --proto_path=E:workroomstudy
ettysrcprotocolBuffer Student.proto
    */
//--java_out:java文件生成的路径
//--proto_path:proto文件路径
//特别注意:生成的java文件千万不能修改

3.2.执行命令生成java文件

//执行如下命令生成java代码
/*D:Program Filesprotoc-3.9.2in>protoc
    --java_out=E:workroomstudy
ettysrcmainjava
    --proto_path=E:workroomstudy
ettysrcprotocolBuffer Student.proto
    */
//--java_out:java文件生成的路径
//--proto_path:proto文件路径
//特别注意:生成的java文件千万不能修改

3.3.使用生成的java文件 

package com.wfd360.demo06;

import com.google.protobuf.InvalidProtocolBufferException;

public class TestProtocolBuffer {
    /**
     * 测试:
     * 1.利用protocol buffer将数据封装到对象
     * 2.将得到的对象转变为byte[](相当于序列化)
     * 3.将数组转变为对象(相当于反序列化)
     * @param args
     */
    public static void main(String[] args) throws InvalidProtocolBufferException {
       //1.利用protocol buffer将数据封装到对象
        MyDataInfo.Person person = MyDataInfo.Person.newBuilder().
                setAddress("北京").setAge(18).setName("无忌").build();
        //2.将得到的对象转变为byte[](相当于序列化)
        byte[] bytes = person.toByteArray();
        //3.将数组转变为对象(相当于反序列化)
        MyDataInfo.Person person1 = MyDataInfo.Person.parseFrom(bytes);
        System.out.println("==>"+person1.getName());
        System.out.println("==>"+person1.getAge());
        System.out.println("==>"+person1.getAddress());
    }
}

  完美!

原文地址:https://www.cnblogs.com/newAndHui/p/11603507.html