java&Protocol Buffers

简介: ps: Protocol Buffers简称PB PB 安装配置 下载 PB: 在 PB 官网,下载最新版(或者其他版本)PB,这里为了与 Java 项目中的 PB Maven 依赖版本一致,使用 PB 2.5.0 版本。

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

 

 

 

 

 

目录
相关文章
|
关系型数据库 MySQL Java
|
存储 Java 程序员
Java学习笔记——dubbo服务之底层通讯协议Protocol
我们先来找到通讯协议的入口点吧。通过Protocol接口查找通讯协议入口点,我们根据接口的export方法搜索发现入口了,在ServiceConfig的doExportUrlsFor1Protocol方法,如下图: 然后我们进入 protocol.
1747 0
|
Java Maven 存储
Riak学习(2):java连接Riak服务,使用Protocol Buffers连接
1,介绍 Riak服务搭建,可以参考: http://blog.csdn.net/freewebsys/article/details/12609995 Riak的接口访问有两种方式:HTTP Protocol Buffers 基于http的和pb的类似。2,基于PB方式的调用 工程采用 maven,引入依赖: 代码放在github上面了: https://github.c
1126 0
|
Java 应用服务中间件 Android开发
struts Caused by: no protocol dtd - Class: java.net.URL
情景:<br> 项目使用了struts2 框架,部署到tomcat中,而tomcat所在机器没有联网(处于公司安全方面的原因),所以启动tomcat时,报错:<br> tomcat Unable to load configuration. - Class: java.net.SocketInputStream<br> 因为struts配置文件如下:<br><span style="
1631 0
|
8天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
38 6
|
23天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####