Google protobuffer序列化工具使用以及与idea集成

2024-02-21 01:48

本文主要是介绍Google protobuffer序列化工具使用以及与idea集成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考:https://www.cnblogs.com/liugh/p/7505533.html

创建Maven项目,pom.xml文件添加如下内容:

    <properties><protobuf.version>3.6.1</protobuf.version><grpc.version>1.18.0</grpc.version></properties><dependencies><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>${protobuf.version}</version></dependency></dependencies><build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.5.0.Final</version></extension></extensions><plugins>  <!-- 编译google protobuffer --><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.5.0</version><configuration><protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact><pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact></configuration><executions><execution><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>

在main目录下新建proto文件夹,并将该文件夹设置为源代码目录(编译时会自动去这个目录下找proto文件),如下图:

在该目录下编写proto文件,这里写各测试的Person.proto,内容如下:

syntax = "proto3";  //标识是protobuffer3  ,默认是2package protobuffer.proto;
option java_package = "com.heavy.learn.protobuffer";
option java_outer_classname = "PersonPB";message Person  {sint64 id = 1;int32 age = 2;string name=3;repeated float exam = 4;bool  good =5;bytes byt = 6;double d = 7 ;enum Level {NORMAL= 0;GOOD= 1;BAD = 2;}Level level = 8;map<string,list> map = 9;message list{repeated Person ele=1;}
}message Family{repeated Person p =1;
}

使用protobuf下的compile来编译,会生成java代码:

编写测试类,来使用序列化与反序列化

package com.heavy.learn.protobuffer;import com.google.protobuf.InvalidProtocolBufferException;import java.util.List;public class ProtoTest {public static void main(String[] args) {PersonPB.Person.Builder person = PersonPB.Person.newBuilder();person.setAge(12);person.setId(1);person.setName("Jacky");person.setExam(0,2.3f);person.setExam(1,2.4f);//设置mapperson.putMap("a",null);PersonPB.Family.Builder fa = PersonPB.Family.newBuilder();fa.addP(person);System.out.println(person);//序列化PersonPB.Person pinfo = person.build();byte[] barr = pinfo.toByteArray();System.out.println(barr.length);try {//反序列化PersonPB.Person p= PersonPB.Person.parseFrom(barr);System.out.println(p);//获取listp.getExamList();PersonPB.Family f = PersonPB.Family.parseFrom(fa.build().toByteArray());List<PersonPB.Person> list = f.getPList();for(PersonPB.Person px : list){System.out.println(px.getAge());}} catch (InvalidProtocolBufferException e) {e.printStackTrace();}}}

 

这篇关于Google protobuffer序列化工具使用以及与idea集成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/730216

相关文章

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自