谷歌开源项目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 ↩︎


相关文章
|
Java Maven
maven依赖原则以及jar包冲突
该文介绍了Maven依赖原则:最短路径优先,申明顺序优先和覆写优先。当有冲突时,Maven选择路径最短的版本,按POM中声明顺序加载,并且子POM的依赖优先于父POM。解决冲突最佳方式是通过`mvn dependency:tree`检查依赖树并调整POM文件中的坐标顺序。
417 2
|
监控 druid Java
Spring Boot 3 集成 Druid 连接池详解
在现代的Java应用中,使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池,提供了丰富的监控和管理功能,成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源,集成Druid连接池,以实现更高效的数据库连接管理。
11067 2
Spring Boot 3 集成 Druid 连接池详解
|
存储 虚拟化 数据中心
如何操作VMware ESXi虚拟机的克隆?
如何操作VMware ESXi虚拟机的克隆?
|
SQL 分布式计算 DataWorks
同步Hive表数据报block文件不存在问题 java.io.FileNotFoundException: File does not exist
同步Hive表数据报block文件不存在问题 java.io.FileNotFoundException: File does not exist
|
API
[已解决]openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host=‘api
[已解决]openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host=‘api
2719 0
|
5月前
|
存储 人工智能 数据可视化
AI助手悬浮框嵌入指南:5分钟打造智能交互入口
阿里云AppFlow AI助手悬浮框助力企业提升数字化服务能力,通过可视化配置实现全场景覆盖、智能交互升级与低成本部署,支持网页、企业微信、钉钉多端统一交互,提升用户体验。
553 0
AI助手悬浮框嵌入指南:5分钟打造智能交互入口
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####
|
10月前
|
人工智能 自然语言处理 安全
【2025】世界顶级AI模型本地部署私有化完整版教程 DeepSeek-R1+Ollama+ChatboxAI合体,瞬间升级你的个人电脑秒变智能神器!
震撼发布!让你的电脑智商飙升,DeepSeek-R1+Ollama+ChatboxAI合体教程,打造私人智能神器!
1551 42
【2025】世界顶级AI模型本地部署私有化完整版教程 DeepSeek-R1+Ollama+ChatboxAI合体,瞬间升级你的个人电脑秒变智能神器!
|
9月前
|
UED
销售易CRM:以用户体验为核心,驱动企业销售效能提升
销售易CRM是一款以用户体验为核心的企业客户关系管理工具。它通过简洁直观的操作界面降低学习成本,流畅稳定的系统性能提升办公效率,智能化功能助力精准识别高价值客户并优化销售流程,移动办公与离线支持打破时间和空间限制。全方位的高效、智能解决方案,助力企业在竞争中脱颖而出,实现持续发展。