如何在Java中使用protobuf

embedded/2024/11/12 6:13:32/

写在前面

本文看下在Java中如何使用protofbuf。

1:介绍

protobuf_4">1.1:什么是protobuf

是一种数据格式,同json,xml,等。但是一种二进制数据格式。

1.2:强在哪里?为啥要用?

小,比json,xml等小3~10倍左右。
快,解析的速度比xml,json等快20~100倍。
小,意味着可以有更低的网络传输延迟。
快,程序也会有更高的性能。
最终有更小的rt。

2:正戏

2.1:基础准备

首先在这里下载安装包,之后解压即可,接着配置下环境变量。然后主要就是设置idea了。首先下载插件:
在这里插入图片描述
接着创建一个测试项目,pom:

java"><?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>proto</artifactId><version>1.0-SNAPSHOT</version><dependencies><!--  protobuf 支持 Java 核心包--><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId>
<!--            <version>3.15.3</version>--><version>3.0.0</version></dependency><!--  proto 与 Json 互转会用到--><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java-util</artifactId>
<!--            <version>3.15.3</version>--><version>3.0.0</version></dependency></dependencies>
</project>

然后创建一个proto文件,如下:
在这里插入图片描述

//使用 proto3 语法 ,未指定则使用proto2
syntax = "proto3";//生成 proto 文件所在包路径
package com.dahuyou.protobuf;//生成 proto 文件所在包路径
option java_package = "com.dahuyou.protobuf.proto";//生成 proto 文件名
option java_outer_classname="DemoProto";message Demo {//自身属性int32 id = 1;string code = 2;string name = 3;
}

接着生成对应的针对文件解析的Java代码:
在这里插入图片描述
将生成的文件拷贝到src/java下就可以了。当然也可以自己通过命令行的方式生成Java代码:
在这里插入图片描述
格式protoc -I=源地址 --java_out=目标地址 源地址/xxx.proto
接着写一个测试类测试下:

java">package com.dahuyou.protobuf.proto;import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.util.JsonFormat;import java.util.Arrays;public class SimpleTestMain {public static void main(String[] args) {//初始化数据DemoProto.Demo.Builder demo = DemoProto.Demo.newBuilder();demo.setId(1).setCode("001").setName("张三").build();//序列化DemoProto.Demo build = demo.build();//转换成字节数组byte[] s = build.toByteArray();System.out.println("protobuf数据bytes[]:" + Arrays.toString(s));// protobuf的大小是15字节,而json的大小是50字节,protobuf大小只是json的四分之一左右System.out.println("protobuf序列化大小: " + s.length);DemoProto.Demo demo1 = null;String jsonObject = null;try {//反序列化demo1 = DemoProto.Demo.parseFrom(s);//转 jsonjsonObject = JsonFormat.printer().print(demo1);} catch (InvalidProtocolBufferException e) {e.printStackTrace();}System.out.println("Json格式化结果:\n" + jsonObject);// json的大小的50个字节,而protobuf的大小是15个字节,大了将近4倍System.out.println("Json格式化数据大小: " + jsonObject.getBytes().length);}
}

运行:
在这里插入图片描述
可以看到protobuf比json小了将近4倍,比xml的话就更多了。

done!!!

写在后面

参考文章列表

Protobuf 是啥以及为啥要用它 。
Java 中使用 protobuf :入门基础篇,看这篇就够了! 。

其他版本

3.5.0 。


http://www.ppmy.cn/embedded/102295.html

相关文章

Flask-RESTFul 之 RESTFul 的第一个案例

Flask-RESTFul 之 RESTFul 的第一个案例 在 Flask-RESTful 中创建一个 RESTful API 的第一个案例通常涉及定义几个基本的路由(endpoints),这些路由将支持资源的创建(POST)、读取(GET)、更新(PUT/PATCH)和删除(DELETE)等操作。以下是一个简单的 Flask-RESTful 示例,…

73 OSPF图解LSA(华三)

71 OSPF多区域实验(华三)-CSDN博客文章浏览阅读166次,点赞8次,收藏3次。实操https://blog.csdn.net/qq_56248592/article/details/141563010?spm=1001.2014.3001.5501 一 基础配置省略 上次的原图基础上扩展

【C++】模板

目录 一、泛型编程——模板概念 二、模板 2.1 函数模板 2.2 类模板 三、模板的特化 3.1 函数模板特化 3.2 类模板特化 四、模板分离编译 五、模板总结 一、泛型编程——模板概念 我们在实现交换函数时&#xff0c;所交换的数据类型各不相同&#xff0c;为了能够普遍实…

LRU缓存算法,大厂面试会手撕

计算机的缓存容量有限&#xff0c;如果缓存满了就要删除⼀些内容&#xff0c;给新内容腾位置。但问题是&#xff0c;删除哪些内容呢&#xff1f; 我们肯定希望删掉哪些没什么⽤的缓存&#xff0c;⽽把有⽤的数据继续留在缓存⾥&#xff0c;⽅便之后继续使⽤。那么&#xff0c;什…

结合令牌(JWT)和签名认证的系统登录及页面访问的详细实现原理和流程

结合令牌&#xff08;JWT&#xff09;和签名认证的系统登录及页面访问的详细实现原理和流程如下&#xff1a; 1. 实现原理 1.1 JWT&#xff08;JSON Web Token&#xff09;令牌 JWT是一种用于用户认证的紧凑、安全的令牌格式。它通常由三部分组成&#xff1a; Header&#…

免费JSON在线解析工具网址

1&#xff0c;https://tool.juhe.cn/ JSON在线解析 (juhe.cn) 2&#xff0c;https://www.sojson.com/ JSON在线 | JSON解析格式化—SO JSON在线工具

java整合Redis

Jedis Jedis是Redis官方推荐的Java连接开发工具&#xff0c;是一个用于连接和操作Redis数据库的Java客户端库。它提供了一系列的方法来操作Redis的键值存储、列表、哈希、集合和有序集合等数据结构。要在Java开发中使用好Redis中间件&#xff0c;必须对Jedis熟悉才能写成漂亮的…

英特尔终止开发开源 H.265/HEVC 编码器项目

作为英特尔可扩展视频技术&#xff08;SVT&#xff09;计划的一部分&#xff0c;一直以来他们持续在开发 SVT-HEVC&#xff0c;这是一款 BSD 许可的高性能 H.265/HEVC 视频编码器&#xff0c;针对至强可扩展处理器和至强 D 处理器进行了优化。但最近他们改变了方向&#xff0c;…