springboot simple (11) springboot protostuff

news2025/1/17 23:05:17

1 protostuff简介

protostuff是一个基于protobuf实现的序列化方法。

优点:不用写.proto文件。

2 springboot protobuf集成开发

第1步:pom文件引入:

       <dependency>
			<groupId>io.protostuff</groupId>
			<artifactId>protostuff-core</artifactId>
			<version>1.4.0</version>
		</dependency>
		<dependency>
			<groupId>io.protostuff</groupId>
			<artifactId>protostuff-runtime</artifactId>
			<version>1.4.0</version>
		</dependency>

第2步:序列化工具类:serializeUtil:

public class serializeUtil {
    public static byte[] serializeObjToByte(Heroic heroic) {
        if (heroic == null) {
            return null;
        }
        Schema<Heroic> schema = RuntimeSchema.getSchema(Heroic.class);
        LinkedBuffer buffer = LinkedBuffer.allocate(4096);
        byte[] protostuff = null;
        try {
            protostuff = ProtostuffIOUtil.toByteArray(heroic, schema, buffer);
        } finally {
            buffer.clear();
        }
        return protostuff;
    }

    public static List<byte[]> serializeListToByte(List<Heroic> list) {
        if (list == null || list.size() <= 0) {
            return null;
        }
        List<byte[]> bytes = new ArrayList<>();
        Schema<Heroic> schema = RuntimeSchema.getSchema(Heroic.class);
        LinkedBuffer buffer = LinkedBuffer.allocate(4096);
        byte[] protostuff = null;
        for (Heroic heroic : list) {
            try {
                protostuff = ProtostuffIOUtil.toByteArray(heroic, schema, buffer);
                bytes.add(protostuff);
            } finally {
                buffer.clear();
            }
        }
        return bytes;
    }

    public static Heroic deserializeByteToObj(byte[] bytes) {
        if (bytes == null) {
            return null;
        }
        Schema<Heroic> schema = RuntimeSchema.getSchema(Heroic.class);
        List<Heroic> list = new ArrayList<Heroic>();

        Heroic heroic = new Heroic();
        ProtostuffIOUtil.mergeFrom(bytes, heroic, schema);
        return heroic;
    }

    public static List<Heroic> deserializeByteToList(
            List<byte[]> bytesList) {
        if (bytesList == null || bytesList.size() <= 0) {
            return null;
        }
        Schema<Heroic> schema = RuntimeSchema.getSchema(Heroic.class);
        List<Heroic> list = new ArrayList<Heroic>();
        for (byte[] bs : bytesList) {
            Heroic product = new Heroic();
            ProtostuffIOUtil.mergeFrom(bs, product, schema);
            list.add(product);
        }
        return list;
    }
}

3 测试验证

postman发送请求:
在这里插入图片描述

序列化byte后:
在这里插入图片描述
反序列化后:
在这里插入图片描述
代码详见:
https://gitee.com/linghufeixia/springboot-simple
chapter8-2


教程列表
springboot simple(0) springboot简介

springboot simple(1) springboot Helloworld

springboot simple(2) springboot Starter

springboot simple(3 )springboot Web开发

springboot simple(4)springboot 数据持久化

springboot simple (5) springboot Nosql

springboot simple (6) springboot mqtt

springboot simple (7) springboot thrift

springboot simple (8) springboot kafka

springboot simple (9) springboot jpa(Hibernate)

springboot simple (10) springboot protobuf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CDGA|数据治理有哪些痛点,该如何应对呢?

数据治理核心目的,就是通过数据的治理,将数据以更加实用更加有价值的赋能使用者创造更大的价值或者是变现能力,但随之而来的问题也日益凸显。 1、数据质量良莠不齐。数据之多,使用之乱,造成的数据不一致,冗余重复等等,通常会使企业花费额外的成本。 2、数据的互联不强,缺乏统一…

95 C语言初阶练习题

CNT=函数调用的次数 do while 不管三七二十一直接进入循环 k=i+j就等于k=k(i+j)** 局部a只能在test函数内使用 &&并且 || 或者

基于java(springboot)广场舞团管理系统源码(java毕业设计)

基于java(springboot)广场舞团管理系统 广场舞团系统&#xff0c;是基于java编程语言&#xff0c;mysql毕业设计&#xff0c;springboot框架和idea工具开发&#xff0c;本系统分为用户&#xff0c;舞团管理者&#xff0c;管理员三个角色&#xff0c;用户可以注册登陆系统&…

对于新技术的发展而言,坚持长期主义,或许才是正道所在

从Meta股价的一路走低到扎克伯格发布的头显并不被用户买账&#xff0c;Facebook全力拥抱Meta正在经历一场过山车。   扎克伯格和他所带领下的Meta遭遇到的如此多的困境和难题&#xff0c;越来越多地让我们开始相信&#xff1a;所谓的元宇宙并非是一蹴而就的&#xff0c;它是一…

JUC并发编程第十四篇,StampedLock(邮戳锁)为什么比ReentrantReadWriteLock(读写锁)更快!

JUC并发编程第十四篇&#xff0c;StampedLock&#xff08;邮戳锁&#xff09;为什么比ReentrantReadWriteLock&#xff08;读写锁&#xff09;更快&#xff01;一、ReentrantReadWriteLock&#xff08;读写锁&#xff09;1、读写锁存在的意义&#xff1f;2、读写锁代码示例3、读…

orCAD Capture DRC规则设置及检查和报错修改

1.进入DRC设置界面: 如下图,依次选中“dsn→Tools→Design Rules Check” 或者 然后会跳出来一个提示框,点击Yes即可 2.进行DRC规则设置: 上面第二步结束之后,就进入到了DRC规则设置界面,主要有四个类别进行设置。如下图,分别是Design Rules Options、Electrriacl Rule…

致初学者:如何学好Python这门编程语言?

前言 对于很多Python这门编程语言的初学者&#xff0c;往往会面临以下问题&#xff1a; Python2和Python3我该学习哪一个&#xff1f; 是否要安装Linux系统学习Python&#xff1f; Python3有各种版本我该安装哪一个&#xff1f; 那么多的图书、视频和电子教程我该选择哪一个&a…

MySQL --- 函数大全 7

目录 1.从地理哈希值返回纬度 ST_LatFromGeoHash() 2.点的返回纬度 ST_Latitude() 3.返回线字符串的长度 ST_Length() 4.从 WKT 构造线字符串 ST_LineFromText&#xff08;&#xff09;/ ST_LineStringFromText&#xff08;&#xff09; 5.从…

excel行列互换方法

excel行列互换的两种方法&#xff1a;使用转置功能和使用函数公式完成行列互换。excel行列互换多用在打印的时候&#xff0c;根据不同的页面设置&#xff0c;有时页面不够用&#xff0c;这个情况就需要用到excel行列互换。 下图是一个简单的excel行列互换的实例应用。4行三列的…

设备备件管理怎么做?

本篇文章将介绍&#xff1a;1、设备备件管理中存在的问题&#xff1b;2、设备备件管理具体怎么做&#xff1f; 设备备件管理&#xff0c;是为了能够按计划进行设备检修&#xff0c;尽量缩短故障停机时间&#xff0c;减少维修费用&#xff0c;在保证备件品种的质量和数量、供应及…

SpringBoot【配置文件】

SpringBoot【配置文件】&#x1f34e;一.配置文件&#x1f352;1.1 配置文件作用&#x1f352;1.2 配置⽂件的格式&#x1f34e;二.properties 配置文件&#x1f352;2.1 properties 基本语法&#x1f352;2.2 properties快捷生成插件(spring tools)&#x1f352;2.3 读取prope…

用好 TypeScript,请再深入一些

TypeScript 已经成为前端编程语言的事实标准。但我从大量的 Code Review 和面试经历中发现&#xff0c;真正能深入使用 TypeScript 的开发其实并不多。如果你不知道 ReturnType<T> 的作用和实现&#xff0c;或许这篇文章也适合你。 当然&#xff0c;我们花大量时间去学习…

tinode客户端安卓版编译手账

前一阵子我自己架设了一个tinode的IM服务器, web直接可以运行 但是安卓版本的一直报错&#xff0c; 具体信息为&#xff1a; No subjectAltNames on the certificate match 问了作者&#xff0c;作者竟然把我的问题直接删除了&#xff0c;还是自己调试代码吧。毕竟源码面前…

两年CRUD,没料到我这渣二本,备战两个月面试阿里,居然侥幸拿下P6的offer

对于很多没有学历优势的人来说&#xff0c;面试大厂是非常困难的&#xff0c;这对我而言&#xff0c;也是一样&#xff0c;出身于二本&#xff0c;原本以为就三点一线的生活度过一生&#xff0c;直到生活上的变故&#xff0c;才让我有了新的想法和目标&#xff0c;因此我这个二…

fl studio21版本如何更新FL最新版升级教程

2022年12月7日晚&#xff0c;全球知名的音乐创作软件&#xff0c;FL Studio正式推出最新21版&#xff0c;为原创音乐人提供更好用的DAW&#xff08;数字音乐工作站&#xff09;工具。 FL Studio中文已上线21新版 FL Studio国人也叫它水果编曲软件&#xff0c;是一款有着20多年…

Java——布隆过滤器

在上一篇博客中讲到位图是用来判定一个正整数是否存在的。对于一个负数&#xff0c;我们可以统一规定让他们加上一个数&#xff0c;变成正数&#xff0c;然后用位图的方式存储。但是对于字符串&#xff0c;我们就没办法存储了。因此发明了布隆过滤器 概念 对于网络上很多需要…

计算机毕设Python+Vue校园新闻发布系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】

目录1. AlexNet模型1.1 AlexNet与LeNet的区别1.2 简化的AlexNet实现1.3 各层输出形状详解2. 读取数据3. 模型训练4. 总结上一篇文章中我们了解到神经网络可以直接基于图像的原始像素进行分类&#xff0c;这种称为端到端&#xff08;end-to-end&#xff09;的方法可以节省很多中…

腾讯实践:从推荐模型的基础特点看大规模推荐类深度学习系统的设计

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点腾讯新闻信息流推荐技术实践.pdf推荐系统在腾讯游戏中的应用实践.pdf基于深度学习的个性化推荐系统实时化改造与升级.pdf推荐技术在vivo互联网商业化…

Zabbix与乐维监控对比分析(四)——告警管理篇

在前面发布的Zabbix与乐维监控对比分析文章中&#xff0c;我们评析了二者在架构与性能、Agent管理、自动发现、权限管理、对象管理等方面的差异。接下来让我们一起看看二者在告警管理方面的差异。 告警管理是所有IT监控平台最重磅的功能之一&#xff0c;也是评判一个监控平台好…