当前位置: 首页 > news >正文

【序列化工具JdkSerialize和Protostuff】

序列化工具对比

  • JdkSerialize:java内置的序列化能将实现了Serilazable接口的对象进行序列化和反序列化, ObjectOutputStream的writeObject()方法可序列化对象生成字节数组

  • Protostuff:google开源的protostuff采用更为紧凑的二进制数组,表现更加优异,然后使用protostuff的编译工具生成pojo类

JdkSerializeUtil


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;/*** jdk序列化*/
public class JdkSerializeUtil {/*** 序列化* @param obj* @param <T>* @return*/public static <T> byte[] serialize(T obj) {if (obj  == null){throw new NullPointerException();}ByteArrayOutputStream bos = new ByteArrayOutputStream();try {ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(obj);return bos.toByteArray();} catch (Exception ex) {ex.printStackTrace();}return new byte[0];}/*** 反序列化* @param data* @param clazz* @param <T>* @return*/public static <T> T deserialize(byte[] data, Class<T> clazz) {ByteArrayInputStream bis = new ByteArrayInputStream(data);try {ObjectInputStream ois = new ObjectInputStream(bis);T obj = (T)ois.readObject();return obj;} catch (Exception ex) {ex.printStackTrace();}return  null;}}

ProtostuffUtil (优选)


import com.heima.model.wemedia.pojos.WmNews;
import io.protostuff.LinkedBuffer;
import io.protostuff.ProtostuffIOUtil;
import io.protostuff.Schema;
import io.protostuff.runtime.RuntimeSchema;public class ProtostuffUtil {/*** 序列化* @param t* @param <T>* @return*/public static <T> byte[] serialize(T t){Schema schema = RuntimeSchema.getSchema(t.getClass());return ProtostuffIOUtil.toByteArray(t,schema,LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));}/*** 反序列化* @param bytes* @param c* @param <T>* @return*/public static <T> T deserialize(byte []bytes,Class<T> c) {T t = null;try {t = c.newInstance();Schema schema = RuntimeSchema.getSchema(t.getClass());ProtostuffIOUtil.mergeFrom(bytes,t,schema);} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return t;}}

Protostuff需要引导依赖:

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

测试

/*** jdk序列化与protostuff序列化对比* @param args*/public static void main(String[] args) {long start =System.currentTimeMillis();for (int i = 0; i <1000000 ; i++) {WmNews wmNews =new WmNews();  //自己测试创建的对象JdkSerializeUtil.serialize(wmNews);}System.out.println(" jdk 花费 "+(System.currentTimeMillis()-start));start =System.currentTimeMillis();for (int i = 0; i <1000000 ; i++) {WmNews wmNews =new WmNews();ProtostuffUtil.serialize(wmNews);}System.out.println(" protostuff 花费 "+(System.currentTimeMillis()-start));}

结果:

相关文章:

【序列化工具JdkSerialize和Protostuff】

序列化工具对比 JdkSerialize&#xff1a;java内置的序列化能将实现了Serilazable接口的对象进行序列化和反序列化&#xff0c; ObjectOutputStream的writeObject()方法可序列化对象生成字节数组 Protostuff&#xff1a;google开源的protostuff采用更为紧凑的二进制数组&#…...

C++ 多线程编程导论(下)

文章目录 参考资料线程安全&#xff08;续&#xff09;门闩与屏障——latch 对象与 barrier 对象门闩&#xff08;latch&#xff09;屏障&#xff08;barrier&#xff09; 一次性调用——once_flag 对象与 call_once 函数 异步任务未来与承诺——future 对象与 promise 对象fut…...

Java并发系列之一:JVM线程模型

什么是线程模型&#xff1a; Java字节码运行在JVM中&#xff0c;JVM运行在各个操作系统上。所以当JVM想要进行线程创建回收这种操作时&#xff0c;势必需要调用操作系统的相关接口。也就是说&#xff0c;JVM线程与操作系统线程之间存在着某种映射关系&#xff0c;这两种不同维…...

容灾独家技术揭秘:HyperBDR无主机数据同步技术

01、一对一单机热备-传统灾备方式 单机热备是一种备份解决方案&#xff0c;它使用两台服务器来确保高可用性&#xff0c;是市场上最为常见的灾备模式。 在单机热备中&#xff0c;一台主服务器和一台备用服务器保持同步&#xff0c;以确保在主服务器出现故障或宕机时可以立即切换…...

FANUC机器人SRVO-050碰撞检测报警和SRVO-053干扰值过大故障报警总结

FANUC机器人SRVO-050碰撞检测报警和SRVO-053干扰值过大故障报警总结 前面和大家分享了关于SRVO-050碰撞检测报警和SRVO-053干扰值过大的原因分析以及处理方法,感兴趣的朋友可以参考以下链接中的内容: FANUC机器人SRVO-050碰撞检测报警原因分析及处理对策...

微信如何提高回复信息速度?

规范流程话术有什么用&#xff1f;为了提高回复客户的效率和质量&#xff0c;可以事先设计好的一套标准化的对话模板。它通常包括多个环节和问题&#xff0c;帮助客服人员或销售人员在与客户沟通时&#xff0c;按照标准化的流程进行&#xff0c;以提高工作效率和客户满意度。 如…...

模拟Stevens Lewis描述的小型飞机纵向动力学的非线性动态反演控制器研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 针对Stevens和Lewis描述的小型飞机纵向动力学的非线性动态&#xff0c;研究非线性动态反演控制器可以是一个有趣的课题。动态反演控制器的目标…...

【C++从0到王者】第十二站:vector基本使用

文章目录 一、vector基本介绍二、vector的基本使用三、vector\<char> 和string的区别四、vector接口介绍1.vector的模板参数2.构造函数3.迭代器4.size和max_size5.resize和reserve6.operator[]和at7.front和back8.data9.push_back和pop_back10.insert和erase11.assign12.…...

了解Unity编辑器之组件篇Miscellaneous(九)

一、Aim Constraint&#xff1a;是一种动画约束&#xff0c;用于使一个对象朝向另一个对象或一个指定的矢量方向 Activate按钮&#xff1a;用于激活或停用Aim Constraint。当Aim Constraint处于激活状态时&#xff0c;其约束效果将应用于目标对象。 Zero按钮&#xff1a;用于将…...

自动驾驶小车

开发自动驾驶小车涉及多个方面&#xff0c;包括硬件和软件。下面是一般情况下开发自动驾驶小车的主要步骤&#xff1a; 确定需求和功能&#xff1a;明确您的自动驾驶小车的目标和应用场景&#xff0c;确定需要的功能和特性&#xff0c;例如感知、决策、控制等。 硬件选择和安…...

机器学习深度学习——多层感知机的从零开始实现

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——多层感知机 &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习 希望文章对你们有所帮助 为…...

Redis的基本使用命令

Redis的使用命令 Redis是一个开源的使用ANSI C编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。它通常被称为数据结构服务器&#xff0c;因为值&#xff08;value&#xff09;可以是 字符串(String), 哈希(Hash…...

Ts入门到放弃

TS 的核心能力在于给 JS 提供静态类型检查&#xff0c;是有类型定义的 JS 的超集&#xff0c;包括 ES5、ES5 和其他一些诸如泛型、类型定义、命名空间等特征的集合。 本次仅会针对类型声明部分配合示例进行着重介绍&#xff0c;更详细的内容以及特性可以查看 Typescript handb…...

黑客技术(网络安全)学习笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…...

Cloud Kernel SIG 月度动态:支持龙芯和申威架构,合入两个内存新特性

Cloud Kernel SIG&#xff08;Special Interest Group&#xff09;&#xff1a;支撑龙蜥内核版本的研发、发布和服务&#xff0c;提供生产可用的高性价比内核产品。 01 SIG 整体进展 Cloud Kernel 开始支持龙芯和申威架构。 合入两个内存新特性&#xff1a;MEMCG LRU LOCK 和…...

IDEA中连接虚拟机 管理Docker

IDEA中连接虚拟机 管理Docker &#x1f4d4; 千寻简笔记介绍 千寻简笔记已开源&#xff0c;Gitee与GitHub搜索chihiro-notes&#xff0c;包含笔记源文件.md&#xff0c;以及PDF版本方便阅读&#xff0c;且是用了精美主题&#xff0c;阅读体验更佳&#xff0c;如果文章对你有帮…...

Debezium日常分享系列之:定制Debezium 信号发送和通知

Debezium日常分享系列之&#xff1a;定制Debezium 信号发送和通知 一、自定义信号和通知通道二、结论 Debezium 2.3 在信号和通知功能方面引入了新的改进。除了 Debezium 提供的预定义信号和通知通道之外&#xff0c;您还可以设置新的信号和通知通道。此功能使用户能够自定义系…...

RpcProvider(rpc服务提供者)实现思路

RpcProvider&#xff08;服务提供者&#xff09;实现思路 上一节说到&#xff0c;如何将一个本地服务发布成远程服务&#xff0c;但没有说明一个rpc框架怎么进行调用的&#xff0c;看看上节代码 #include <iostream> #include <string> #include "user.pb.h…...

GNSS技术知识你知道多少?这些你或许还未掌握

GNSS信号频段 GNSS频谱图展示了不同的GNSS信号及其星座、载波频率、调制方案&#xff0c;以及所有这些信号在同一L波段频段内如何相互关联&#xff0c;是GNSS专业人员的必备工具&#xff0c;包括设计和开发GNSS系统的工程师&#xff0c;以及测试GNSS系统的工程师。 GNSS术语 …...

YOLOv8教程系列:三、使用YOLOv8模型进行自定义数据集半自动标注

YOLOv8半自动标注 目标检测半自动标注的优点包括&#xff1a; 1.提高标注效率&#xff1a;算法能够自动标注部分数据&#xff0c;减少了人工标注的工作量&#xff0c;节省时间和资源。 2.降低成本&#xff1a;自动标注可以减少人工标注的成本&#xff0c;特别是对于大规模数据…...

赋能智能体大脑:在快马平台中集成AI模型实现高级对话能力

在探索AI辅助开发的过程中&#xff0c;我发现智能体的核心能力很大程度上取决于其"大脑"——也就是背后支撑决策的AI模型。最近在InsCode(快马)平台实践了一个很有意思的项目&#xff1a;如何为智能体集成AI模型来实现高级对话功能。整个过程让我深刻体会到&#xff…...

Linux/C++多进程

给你最简洁、能直接用、新手一看就懂的 Linux C 多进程核心内容&#xff0c;不废话。1. 核心 API&#xff08;就这 3 个最常用&#xff09;fork()&#xff1a;创建子进程getpid()&#xff1a;获取当前进程 IDwait() / waitpid()&#xff1a;等待子进程结束&#xff0c;防止僵尸…...

【枕上节令笺】清明食青团,一口咬尽江南春

最近下班有时间&#xff0c;都在捣鼓公众号文章&#xff0c;之前的两天一直沉迷于改主题、改完主题改内容排版、最后发现文章偏离主题写的太杂了&#xff0c;奈何语文水平太久没用了&#xff0c;就想到用写技术博客的总分总的写法去表诉文章…有热爱或想写公众号的同学一起交流…...

CPU与操作系统【简单的认识理解】

在日常开发过程中&#xff0c;我们都是正常写完代码去执行即可&#xff0c;不用了解计算机运行的底层逻辑。但是了解计算机运行的底层逻辑&#xff0c;对于我们以后理解撰写代码以及理解错误原理有着重要地位&#xff0c;因此&#xff0c;我们特意写上一篇文章跟大家介绍。在计…...

实战指南:利用Hydra与SNETCracker加固3389远程桌面安全

1. 3389端口与远程桌面安全基础 3389端口是Windows远程桌面协议&#xff08;RDP&#xff09;的默认通信端口&#xff0c;就像你家大门的钥匙孔。想象一下&#xff0c;如果钥匙孔被所有人知道位置&#xff0c;又没装猫眼和防盗链&#xff0c;会是什么后果&#xff1f;这就是为什…...

基于粒子群算法(PSO)的宽带消色差超透镜Matlab核心程序探秘

基于粒子群算法PSO宽带消色差超透镜matlab核心程序有注释便于理解代码的含义&#xff0c;包含FDTD仿真&#xff0c;文章复现案例讲解&#xff0c;适合学习几何相位和传输相位&#xff0c;消色差效果很好可以对代码进行优化在光学领域&#xff0c;宽带消色差超透镜是一个热门的研…...

Qwen3-14B WebUI权限分级:管理员/普通用户/只读访客三类角色配置

Qwen3-14B WebUI权限分级&#xff1a;管理员/普通用户/只读访客三类角色配置 1. 权限分级的重要性与场景需求 在私有化部署Qwen3-14B模型时&#xff0c;企业或团队通常需要根据不同成员的职责分配不同的操作权限。合理的权限分级能够&#xff1a; 保障系统安全&#xff1a;防…...

太烧token了,我用Ai写了一个vscode的插件wps-editor(已开源)

这是一篇关于开源项目Wps-Editor的介绍文章&#xff0c;希望能让大家了解它的价值并支持其发展。 引言 在人工智能(AI)浪潮席卷各行各业的今天&#xff0c;大型语言模型(LLM)已成为内容创作者、办公人士、学生乃至研究者的得力助手。无论是撰写报告、分析数据、润色文案&#…...

卡诺图简化逻辑函数详解

你提供的图片是数字逻辑电路教材中关于**卡诺图&#xff08;Karnaugh Map&#xff09;**的内容&#xff0c;主要讲解如何用卡诺图表示和化简逻辑函数。下面我为你逐部分解释&#xff1a;&#x1f4cc; 一、核心概念&#xff1a;什么是卡诺图&#xff1f;卡诺图是一种图形化工具…...

如何用LangChain开发一个Agent,20分钟包教包会!

26年一定是一个 Agent 大年&#xff0c;我这边持续出系列文章&#xff0c;帮助大家更好的落地 Agent&#xff0c;今天的重点是程序员最常用的 Agent 框架 LangChain。 只不过这东西可能由于 AI Coding 的成熟&#xff0c;由给人看变成给 AI 看的。 LangChain 既是一个开源的A…...