序列化的简介

2023-10-26

序列化

序列化的介绍

1.1 定义

序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对 象。这两个过程结合起来,可以轻松地存储和传输数据

1.2 序列化的目的

通过序列化以字节流的形式使对象在网络中进行传递和接收 永久性保存对象,保存对象的字节序列到本地文件或者数据库中 通过序列化在进程间传递对象 深拷贝对象 跨语言传递数据

2.常见的序列化方式特点

2.1 JDK

2.2 JSON

Jackson

相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。 而且Jackson社区相对比较活跃,更新速度也比较快。 Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。 Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式

 Gson

Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来, 但自从在2008年五月公开发布第一版后已被许多公司或用户应用。 Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。 而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。 类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神 器。 Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。

FastJson

Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。 无依赖,不需要例外额外的jar,能够直接跑在JDK上。 FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定 引用。 FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

2.3 kryo

1.速度快,序列化后体积小

2.跨语言支持较复杂

2.4 Protobuf

1.结构化数据存储格式(xml,json等)

2.高性能编解码技术

3.语言和平台无关,扩展性好

4.支持java,C++,Python三种语言。

2.5 hessian

1.默认支持跨语言

2.较慢

2.6 Thrit

1.Thrift支持多种语言(C++,C#,Cocoa,Erlag,Haskell,java,Ocami,Perl,PHP,Python,Ruby,和 SmallTalk)

2.Thrift适用了组建大型数据交换及存储工具,对于大型系统中的内部数据传输,相对于Json和xml在性能上和传 输大小上都有明显的优势。

3.Thrift支持三种比较典型的编码方式。(通用二进制编码,压缩二进制编码,优化的可选字段压缩编解码)

4.支持RPC

2.7 fst

1.fst是完全兼容JDK序列化协议的系列化框架,序列化速度大概是JDK的4-10倍,大小是JDK大小的1/3左右。

2.8 MsgPack

官网:https://msgpack.org redis中使用此标准

1.速度快

2.序列化手的数据占用空间小

3.中间转换的是字符数组,不方便存储到文件之中

4.性能不够稳定(要求字段顺序一致,删减字段都需要注意)

2.9 Avro

hadoop研发序列化 支持RPC

3 各大框架序列化方式

3.1 dobbo

通讯协议:dobbo协议,rmi协议,hessian协议,http协议,webservice协议 序列化方式:hessian,jdk,json,soap,kryo,fst,Protobuf(新版本支持),kryo

3.2 springcloud

通讯协议:http

序列化方式:json

 3  性能测试

3.1 性能衡量指标

不同的序列化方式,本身设计就是满足不同的应用场景,可序列化的数据类型,比如是否支持 StringBuffer和StringBuilder 等,所以单独对比速度快慢,也不太合理,但大体上衡量标准可以参考如下


1.是否支持跨语言,支持语种是否丰富
2.编码后的码流
3.编解码的性能
4.类库是否小巧,API使用是否方便
5.使用者开发的工作量和难度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

序列化的简介 的相关文章

  • Java 相当于 C# 中带有 @ 的逐字字符串

    快问 Java 中是否存在应用于字符串的 等效项 例如我可以做 c afolder afile 在 C 中 让它在处理时忽略转义字符 而不必这样做 c afolder aFile Java 有等效的吗 嗯 stackoverflow 正在逃
  • 在 PLSQL Oracle 中抛出特定错误消息...在休眠中捕获?

    是否可以在 PL SQL oracle 存储过程中抛出特定的错误消息 并在调用它时在 Hibernate 中捕获它 您可以从 PL SQL 代码中抛出用户定义的错误消息 20000 到 20999 之间的错误代码保留用于用户指定的错误消息
  • 如何替换引号之间出现的任何单词

    我需要能够替换所有出现的单词 and 仅当它出现在单引号之间时 例如 将字符串中的 and 替换为 XXX This and that with you and me and others and not her and him 结果是 T
  • Thread.yield()之后线程的Thread.State是什么?

    是什么Thread State之后的一个线程Thread yield 是不是一个Thread State WAITING 谢谢 不 线程仍会在RUNNABLE http download oracle com docs cd E17409
  • “不能从静态上下文引用非静态方法”JPA Java

    我从这一行收到 无法从静态上下文引用非静态方法 错误 createStudent stu00001 new Date 631152000000 m WB new Type Name Bob Smith 如何正确组成 日期 我查看了 API
  • 具有多字符替换的字符串组合(产生返回Java的替代重写)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 还有另一篇 Stack Overflow 帖子是为与车辆登记号相关的算法创建的 根据输入的车牌 例如ABC123 和列表 替换值 例如
  • 如何使用 mongoTemplate 实现 Mongodb Collection 的分页

    我是 mongoDb 中的菜鸟 我需要为任何特定集合实现分页 例如说 我有一个 Foo 集合 并且有一个返回 Foo 集合中所有记录的函数 public List
  • java中数字字符串间隔排序

    我正在与一些人一起上一个人课 其中有姓名 年龄范围等详细信息 年龄区间为 0 5 6 10 11 30 31 45 46 50 50 100 100 110 我正在上 Person 课name ageBand字符串间隔及其参数化构造函数 g
  • 包java.time不存在,jdk1.8

    嗯 我刚刚开始从事代号工作 我对 Java 有相当不错的经验 我的代码一切都很好 没有任何问题 但在编译时我得到了这个 error package java time does not exit import java time Local
  • 从相对路径读取文件

    我知道这个问题之前已经被问过 1000 次了 我确实尝试了所有解决方案 Java项目中如何从相对路径读取文件 java io File 找不到指定的路径 https stackoverflow com questions 3844307 h
  • 没有 if 条件(动态查询)或乱码的Where子句中的PreparedStatement“为null”

    假设我有这样的查询 SELECT FROM CUSTOMERS WHERE CUSTOMER ID 使用PreparedStatement 我可以绑定变量 pstmt setString 1 custID 但是 我无法通过以下绑定获得正确的
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv
  • JAXB 和 complexType 与其元素之一共享名称会生成不正确的代码

    我有这个 xsd 它有点糟糕 但我必须使用它来避免更改我正在编写的 servlet 的接口 请求 响应接口的 xsd 包含以下行
  • Spring:当我的类已经用@RestController注释时,为什么我仍然应该使用@RequestBody?

    我目前正在将 Java 和 Spring 用于我的 Web 服务应用程序 我正在使用 RestController希望消除使用注释的需要 ResponseBody and RequestBody注释 不幸的是 删除 RequestBody注
  • Spring MVC - 从 JSP 提交对象

    我有一个显示客户列表的 JSP ArrayList searchResults 我希望能够选择其中之一 并将其 提交给 Spring MVC 控制器 但是 我似乎无法传递所选对象 只能传递它的属性 例如 customerId 我真的需要传递
  • 如何在 Java 中以编程方式获取接口的所有实现的列表?

    我可以通过反思或类似的方式来做到这一点吗 我已经搜索了一段时间 似乎有不同的方法 这里总结一下 反思 https github com ronmamo reflections如果您不介意添加依赖项 该库非常受欢迎 它看起来像这样 Refle
  • Java 中的引用变量里面有什么?

    我们知道对象引用变量保存表示访问对象的方式的位 它不保存对象本身 但保存诸如指针或地址之类的东西 我正在阅读 Head First Java 第 2 版 一书 书中写道 第 3 章第 54 页 在 Java 中我们并不真正知道什么是 在引用
  • 优化Gson反序列化

    优化反序列化的最佳方法是什么 我目前正在使用标准 Gson toJson 和 Gson fromJson 方法来序列化和反序列化一些复杂对象 我希望尽可能减少反序列化时间 如果重要的话 我的最复杂的对象包含 43 个变量 如果你想使用 Gs
  • 使用java读取行并映射过滤数据[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions publi
  • 在 WildFly 10 中添加 jar 作为部署

    有没有办法 我们可以将 jar 部署为库 部署WildFly 10就像我们可以做到的那样weblogic服务器 或者我们可以将 jar 放在服务器的任何文件夹中并将这些依赖项定义为provided 我得到了什么部署方式jars on Wil

随机推荐

  • 动态规划(五)

    01背包问题 01 Knapsack problem 有10件货物要从甲地运送到乙地 每件货物的重量 单位 吨 和利润 单位 元 如下表所示 由于只有一辆最大载重为30t的货车能用来运送货物 所以只能选择部分货物配送 要求确定运送哪些货物
  • 如何快速画AltiumDesigner封装——用Ultralibrarian生成库文件---官网最新打开方式

    如何用Ultralibrarian生成库文件 官网最新打开方式 步骤1 下载元器件 步骤2 AltiumDesigner生成库文件 Ultralibrarian软件比较常用的生成库文件的软件 网上对于它的介绍大多还停留在软件使用层面上 但官
  • 区块链的工作流程

    工作流程 通过前两篇文章 相信大家对区块链有了基本的认识 区块链系统有很多种 第一个应用区块链的软件就是比特币 事实上区块链就是比特币带出来的 到现在为止 已经出现很多基于区块链的系统了 比如超级账本 以太坊等 每一类系统都有自己的特点 无
  • 雪花算法生成ID

    雪花算法生成ID Snowflake 雪花算法是由Twitter开源的分布式ID生成算法 以划分命名空间的方式将64 bit位分割成多个部分 每个部分代表不同的含义 而Java中64bit的整数是Long类型 所以在Java中 SnowFl
  • [网络安全]sqli-labs Less-2 解题详析

    网络安全 Less 2 GET Error based Intiger based 基于错误的GET整型注入 判断注入类型 判断注入点个数 查库名 查表名 查users表的列名 查字段 注意 总结 往期回顾 网络安全 sqli labs L
  • TensorRT简介

    一 什么是TensorRT 一般的深度学习项目 训练时为了加快速度 会使用多 GPU 分布式训练 但在部署推理时 为了降低成本 往往使用单个 GPU 机器甚至嵌入式平台 比如 NVIDIA Jetson 进行部署 部署端也要有与训练时相同的
  • 【设计模式】工厂方法模式(C#)

    设计模式 工厂方法模式 1 概述 针对简单工厂中的缺点 使用工厂方法模式就可以完美的解决 完全遵循开闭原则 定义一个用于创建对象的接口 让子类决定实例化哪个产品类对象 工厂方法使一个产品类的实例化延迟到其工厂的子类 工厂方法模式的主要角色
  • 解决gensim fasttext官方案例报错TypeError: Either one of corpus_file or corpus_iterable value must be provide

    完整报错为 TypeError Either one of corpus file or corpus iterable value must be provided 解决方法 将官方案例中传递参数时指定的sentences 删除即可 比如
  • Recyclerview源码深入探索:Adapter的增删改再也不迷路

    作者 maxcion 看到标题说的是三级缓存 有的地方说是四级缓存 请你不要迷惑 到底是三还是四 这就像图片加载这个场景有人说是三级缓存有人说是二级缓存 说三级缓存是把通过网络请求图片这个环节也认为是一层缓存 你认为这个环节应该不应该属于缓
  • 基于Qt、C++的毕业设计课设数学绘图工具(平面图、图表、立体图绘制-附下载链接)

    基于Qt C 的毕业设计课设数学绘图工具 平面图 图表 立体图绘制 介绍 这是我的毕业设计 基于Qt Creator 4 11 1 c 语言 效果图如下 点我下载项目源码 含打包软件 使用说明 1 二维函数绘制 开始界面 函数设置 输入界面
  • MySQL免安装配置教程(win10)

    一 下载安装包 1 1 下载zip包 打开官网地址下载zip安装包 这里下载的版本是5 7 可自行选择 对应下载网址 https downloads mysql com archives community 根据自己电脑进行选择对应安装包
  • 周志华《机器学习》笔记(第4章) 决策树

    第四章 决策树 1 总述 决策树基于树结构进行决策 叶结点对应于决策结果 其他每个结点对应于一个属性测试 每个结点包含的样本集合根据属性测试的结果被划分到子结点中 最终目的是产生一个泛化能力强 能够处理未知样本的决策树 基本流程遵循简单而直
  • XSS学习

    目录 什么是XSS 概念 理解 XSS分类 存储型XSS 反射型XSS 原理 攻击过程 DOM型 攻击过程 DOM行XSS与反射型XSS区别 存储型XSS与反射型XSS区别 DVWA实验 反射型XSS low等级 JavaScript弹窗函
  • 2013年第四届C/C++ A组蓝桥杯省赛真题解析

    目录 第一题 高斯日记 题目描述 思路分析 AC代码 第二题 排它平方数 题目描述 思路分析 AC代码 第三题 振兴中华 题目描述 思路分析 AC代码 第四题 颠倒的价牌 题目描述 思路分析 AC代码 第五题 前缀判断 题目描述 思路分析
  • 将文件从本机上传到虚拟机中Linux系统中的几种方法

    一 使用FileZilla上传文件 1 启动虚拟机 打开Linux终端 输入ifconfig命令查看IP地址 IP地址为192 168 59 6 2 打开FileZilla 输入IP地址 用户名 密码 端口号 点击快速连接 连接成功后 左边
  • 测试工程师(初&中)面试题+知识点

    说明 记录下个人开始转行自学 gt 开始求职期间主要的学习内容 涵盖了 计算机基础 测试基础 自动化测试等 初中级测试 20年夏更新 需要掌握的大部分内容 巩固基础与按知识点自查时可选择性参考 一 面试题 1 请分别介绍一下单元测试 集成测
  • 芯片的SD/MMC控制器以及SD卡介绍

    1 MMC SD卡 eMMC介绍 1 1 三者关联 1 最早出现的是MMC卡 卡片式结构 按照MMC协议设计 相较于NandFlash芯片来说 MMC卡有2个优势 第一是卡片化 便于拆装 第二是统一了协议接口 兼容性好 2 后来出现SD卡
  • 数据库---mysql 之 常用命令行命令

    1 展示当前所有的数据库 show databases mysql gt show databases Database information schema jzq test mtx 1 mysql performance schema
  • 使用特网云云主机的最显着原因之一

    云计算的快速发展主要是由于移动设备的数量不断增加 云不仅对企业有用 对普通人也有用 我们无需在 PC 上安装程序即可运行程序 通过 Internet 存储和访问内容 无需物理服务器即可开发和测试程序 等等 云计算本质上是我们解决当今企业面临
  • 序列化的简介

    序列化 序列化的介绍 1 1 定义 序列化是将对象状态转换为可保持或传输的格式的过程 与序列化相对的是反序列化 它将流转换为对 象 这两个过程结合起来 可以轻松地存储和传输数据 1 2 序列化的目的 通过序列化以字节流的形式使对象在网络中进