谷歌开源项目ProtoBuf一探(基础环境配置)

简介: 谷歌开源项目ProtoBuf一探(基础环境配置)

在和远端交互数据时,特别是通信双方使用的编程语言不一样,如服务端使用Java而客户端使用C++等其它编程语言。这就会导致数据流不兼容,出现你不懂我我不懂你的局面,这时候谷歌的谷歌开源项目ProtoBuf就可以解决这个问题,除此之外,用它编写的协议对老版本协议进行兼容。在这里给出自己实践的过程和结果。


实践环境


  • Win7操作系统
  • 编程语言Java
  • 编程软件为IDEA


第一步:编写.proto文件


这一步不需要过多说了,请参照官方指导1中Defining Your Protocol Forma部分。讲一下注意的点:

option java_package = "com.testnetdeve.custom.proto";
option java_outer_classname = "AlarmProto";

如上代码是自己写的包名和类名参数

image.png

图中所示是.proto源文件以及编译后的java文件


解释


  • option java_package = “com.testnetdeve.custom.proto”, 这一句是编编译.proto文件后输出得到的java文件的包名
  • option java_outer_classname = “AlarmProto”,这一句是编编译.proto文件后输出得到的java文件的名字,即类名


注意


1.文件的包名最后和你的proto文件所在的项目的文件夹的位置统一,即你想编译后的java文件在哪个地方,你就把java_package的属性设为此。如我想把输出的java文件放在com->testnetdeve->custom->proto,我就把属性定位com.testnetdeve.custom.proto,此时生成对应的java文件的包名如图所示。

image.png

2.java_outer_classname的参数不能和.proto文件中结构体名一致,否则会报错。


第二步:编译.proto文件


下载.proto文件的编译器,传送门在此。我的操作系统是64bit的,所以下载的是protoc-3.7.1-win64.zip文件如图所示。

1665708421922.jpg


4.解压protoc-3.7.1-win64.zip文件后安装即配置全局环境变量。

image.png

5.验证是否安装成功

输入命令protoc --version,出现版本号即为成功,如图所示。

image.png


第三步:编译在第一步中的.proto文件


在命令行中输入如下代码:

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto


其中SRC_DIR是源文件夹,DST_DIR是目的文件夹,因为我的Java项目文件夹层次太深,不好写命令。所以我就把.proto文件复制到D:\Java文件夹中,然后运行如下命令:


protoc -I=D:\Java --java_out=D:\Java D:\Java\alarm.proto


在D:\Java文件夹中就会生成以com文件夹为根文件夹的层次结构,就是第一步中java_package的属性值的文件结构。在最后一层的proto文件夹中,你会发现被编译后生成的AlarmProto.java文件。


第四步:导入ProtoBuf项目的jar包


下载地址在此,请点击,在你的项目中导入该jar包。当然也可以进行Maven直接导入。


第五步:测试生成的Java文件


测试代码为:


package com.testnetdeve.UnitTest;
import com.testnetdeve.custom.proto.AlarmProto;
import org.junit.Test;
public class AlarmProtoTest {
    @Test
    public void protoTest(){
        AlarmProto.Alarm.Builder  alarm = AlarmProto.Alarm.newBuilder();
        alarm.setCommunity("世纪佳缘");
        alarm.setBuildingId(31);
        alarm.setCellId(1);
        alarm.setRoomId(204);
        alarm.setAttachment("此时的时间");
        System.out.println(alarm.toString());
    }
}


结果为:


community: "\344\270\226\347\272\252\344\275\263\347\274\230"
building_id: 31
cell_id: 1
room_id: 204
attachment: "\346\255\244\346\227\266\347\232\204\346\227\266\351\227\264"


至此,你就会使用谷歌开源项目ProtoBuf了。


参考文献


https://developers.google.com/protocol-buffers/docs/javatutorial ↩︎


相关文章
|
开发框架 移动开发 小程序
强烈推荐:绝对是好用的小程序开源框架
强烈推荐:绝对是好用的小程序开源框架
184 0
|
开发框架 前端开发 Java
GitHub首次开源标星20k+项目:Guns-现代化主流Java应用开发框架
Guns是一个现代化的Java应用开发框架,基于主流技术Spring Boot2 + Vue3,Guns的核心理念是提高开发人员开发效率,降低企业信息化系统的开发成本
|
2月前
|
IDE Go 开发工具
Golang简史及常见的开发工具介绍
这篇文章介绍了Go语言的适合学习人群、发展历史、优劣势、学习原因、前景以及学习方法,同时概述了几种常用的Go语言开发工具。
38 2
|
安全 Java Serverless
65w字!阿里分布式开发小册Github新开源!原理实践双飞
我们都知道传统的集中式系统已无法满足当今的互联网三高需求,所以现在的系统架构都是向着分布式系统不断演进。同时,越来越多的企业选择通过云的方式发布和部署应用,这也大大促进了分布式系统的发展。未来将是分布式系统“爆发”的时代。
|
前端开发 JavaScript 程序员
【程序员的福音】一款C#开源的GitHub加速神器
【程序员的福音】一款C#开源的GitHub加速神器
188 0
|
Web App开发 移动开发 JSON
谈一谈|谷歌插件入门
谈一谈|谷歌插件入门
311 0
|
XML JavaScript 前端开发
nasal脚本起源与环境搭建(flightgear开源项目)
nasal脚本起源与环境搭建(flightgear开源项目)
291 0
|
缓存 安全 JavaScript
别再造轮子了,Google 开源的 Guava 工具库真心强大!
别再造轮子了,Google 开源的 Guava 工具库真心强大!
|
存储 小程序 前端开发
最新版小程序开发白皮书解读系列(1) — 由来
本系列文章将会解读 W3C 小程序白皮书第 2 版(最新版),这份白皮书是制定小程序的标准。
205 0
最新版小程序开发白皮书解读系列(1) — 由来
|
机器学习/深度学习 JavaScript 前端开发
GitHub开源的文言文编程语言、程序生成中国山水画、格律诗编辑程序
GitHub开源的文言文编程语言、程序生成中国山水画、格律诗编辑程序
GitHub开源的文言文编程语言、程序生成中国山水画、格律诗编辑程序