Protobuf协议的Java语言应用实例讲解
小标 2018-10-12 来源 : 阅读 1239 评论 0

摘要:本文主要向大家介绍了Protobuf协议的Java语言应用实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了Protobuf协议的Java语言应用实例讲解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。


Protobuf的Java实例


一、 安装Protobuf


去Protobuf的GitHub下载,解压。


如果你是Windows环境,则还要下载多一个东西。protobuf-2.5.0-windows.zip。


解压protobuf-2.5.0-windows.zip,把protoc.exe放在Protobuf安装目录下的src里。(其实放哪都可以)


二、 配置环境变量


编辑系统变量Path,添加Protoc.exe的存放目录。



三、 Eclipse新建项目


我使用maven构建protobuf项目,方便引入protobuf-java-2.5.0.jar依赖。


在项目根目录创建proto文件夹,存放proto文件。



maven依赖pom.xml


<dependency>

    <groupid>com.google.protobuf</groupid>

    protobuf-java</artifactid>

    <version>2.5.0</version>

</dependency>

   


四、编写.proto文件


在proto文件夹下编写person-entity.proto,如下(proto协议的规则点这查看)


option java_outer_classname = "PersonEntity";//生成的数据访问类的类名  

message Person {  

  required int32 id = 1;//同上  

  required string name = 2;//必须字段,在后面的使用中必须为该段设置值  

  optional string email = 3;//可选字段,在后面的使用中可以自由决定是否为该字段设置值

}

   


四、使用protoc.exe编译成java类


有两种方法:


1. 使用Java Rumtime执行cmd命令


2. 直接打开cmd运行命令也行。



1. 使用Java Rumtime执行cmd命令


util包下新建GenerareClass类


/**

 * protoc.exe

 * @author ganhaibin

 *

 */

public class GenerateClass {

    public static void main(String[] args) {

        String protoFile = "person-entity.proto";//  

        String strCmd = "d:/dev/protobuf-master/src/protoc.exe -I=./proto --java_out=./src/main/java ./proto/"+ protoFile;  

        try {

            Runtime.getRuntime().exec(strCmd);

        } catch (IOException e) {

            e.printStackTrace();

        }//通过执行cmd命令调用protoc.exe程序  

    }

}

   


命令格式如下。


protoc.exe -I=proto的输入目录 --java_out=java类输出目录 proto的输入目录包括包括proto文件

   


2. 直接打开cmd运行命令



生成的PersonEntity.java类




五、测试


编写Test类,模拟序列化和反序列化过程。


public class Test {

    public static void main(String[] args) throws IOException {

        //模拟将对象转成byte[],方便传输

        PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();

        builder.setId(1);

        builder.setName("ant");

        builder.setEmail("ghb@soecode.com");

        PersonEntity.Person person = builder.build();

        System.out.println("before :"+ person.toString());

 

        System.out.println("===========Person Byte==========");

        for(byte b : person.toByteArray()){

            System.out.print(b);

        }

        System.out.println();

        System.out.println(person.toByteString());

        System.out.println("================================");

 

        //模拟接收Byte[],反序列化成Person类

        byte[] byteArray =person.toByteArray();

        Person p2 = Person.parseFrom(byteArray);

        System.out.println("after :" +p2.toString());

    }

}


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程