zoukankan      html  css  js  c++  java
  • java&Protocol Buffers

    ps: Protocol Buffers简称PB

    PB 安装配置

    • 下载 PB: 在 PB 官网,下载最新版(或者其他版本)PB,这里为了与 Java 项目中的 PB Maven 依赖版本一致,使用 PB 2.5.0 版本。
    • 安装 PB:
      • 解压:tar zxvf protobuf-2.5.0.tar.gz,使用 cd 命令进入 protobuf-2.5.0 目录。
      • ./configure,通常建议加上 --prefix 参数来指定目录,例如:
        ./configure --prefix=/usr/local/Cellar/protobuf/2.5.0
      • make,如出现 make: Nothing to be done for all 错误提示,表示 PB 已经被编译好了,如需重新编译,可以先用 make clean 命令删除已经编译好的文件。
      • make check
      • make install
    • 设置环境变量: 编辑 /etc/profile,在文件末尾加入:
    export PATH=$PATH:/usr/local/Cellar/protobuf/2.5.0/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Cellar/protobuf/2.5.0/lib

    至此,PB已经成功安装完毕,可以使用 protoc --version 命令来验证是否安装成功,如果出现如下结果,则表示 PB 已经安装成功并且生效。

    Intellij IDEA 安装 Protobuf 插件

    通常我们在编写好 PB 文件之后,需要使用 protoc 来将 PB 文件编译成对应的代码,在命令行里面我们可以使用如下命令来生成对应的 Java 文件:

    protoc --proto_path=src --java_out=build/gen src/myfolder

    在 IDE 中编写 PB 文件之后,可以在指定 package 下一键生成对应的 Java 文件,方便对 Java 文件的管理。

    Google Protocol Buffers support 就是有着上诉功能的 IDEA 插件。

    • 安装 PB 插件。进入 IDEA 设置中心,打开 Plugins,点击 Browse repositories,搜索 protocol buffer安装插件,如下图所示。安装好 PB 插件之后,需要重启 IDEA。

    • 配置路径。PB 插件安装完毕之后,需要为插件配置 PB 的编译路径,也就是在上一步中我们安装的 protoc

    至此,IDEA PB 插件安装完成,下面介绍如何在项目中使用 PB 插件来快速生成 Java 文件。

    Java PB Demo

    • 新建 Maven 项目,配置 PB 生成 Java 文件的目录:进入 Project Settings,填写 Output source directory,这里的目录就是项目的 Java source 目录。

    • 根据 PB 描述文件,生成 Java 文件。在 PB 文件中右键,从菜单中选择 Compile ‘person.proto’,就能生成对应的 Java 文件。

      option java_package = "first.proto";
      option java_outer_classname = "PersonModel";
    
      message Person {
          required int32 id = 1;
          required string name = 2;
          optional string email = 3;
      }
    • 加入 Maven 依赖。在 pom.xml 文件中加入如下依赖:
      <dependency>
          <groupId>com.google.protobuf</groupId>
          <artifactId>protobuf-java</artifactId>
          <version>2.5.0</version>
      </dependency>

    序列化  

            PersonModel.Person.Builder personBuilder = PersonModel.Person.newBuilder();  

            personBuilder.setId(1);  

            personBuilder.setName("***");  

            personBuilder.setEmail("xxx@163.com");  

            PersonModel.Person person1 = personBuilder.build();  

       // 将数据写到输出流,如网络输出流,这里就用ByteArrayOutputStream来代替  

            ByteArrayOutputStream output = new ByteArrayOutputStream();  

       person1 .writeTo(output);  

     

     反序列化  

       byte[] byteArray = output.toByteArray();  

      // 接收到流并读取,如网络输入流,这里用ByteArrayInputStream来代替  

          ByteArrayInputStream input = new ByteArrayInputStream(byteArray);  

          PersonModel.Person person2= PersonModel.Person.parseFrom(input);  

          System.out.println("ID:" + person2.getId());  

          System.out.println("name:" + person2.getName());  

          System.out.println("email:" + person2.getEmail());  

     

     

     

     

  • 相关阅读:
    BZOJ 2244 [SDOI2011]拦截导弹 (三维偏序CDQ+线段树)
    BZOJ 2141 排队 (三维偏序CDQ+树状数组)
    BZOJ 3295 [CQOI2011]动态逆序对 (三维偏序CDQ+树状数组)
    BZOJ 3262 陌上花开 (三维偏序CDQ+树状数组)
    BZOJ 4012 [HNOI2015]开店 (树分治+二分)
    CF1090H Linearization
    BZOJ 4141 [Thu Summer Camp 2013]魔塔
    luogu P4654 [CEOI2017]Mousetrap
    luogu P4548 [CTSC2006]歌唱王国
    [总结] min-25筛
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/5663969.html
Copyright © 2011-2022 走看看