• 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());
        }
    }

      完美!

  • 相关阅读:
    Python学习笔记013_正则表达式
    Python学习笔记012_网络_异常
    Python学习笔记011_模块_标准库_第三方库的安装
    Python学习笔记010_迭代器_生成器
    PHP extract() 函数
    php 获取客户端IP
    php array_walk
    PHP array_map()
    PHP call_user_func
    类的更新----MVC设计模式
  • 原文地址:https://www.cnblogs.com/newAndHui/p/11603507.html
Copyright © 2020-2023  润新知