序列化的意义以及常见的的序列化方式

一,为什么序列化?

  • 对象保存到文件或数据库
  • 网络编程时对象跨平台跨语言传输,也即从windows上序列化的对象可到linux上反序列化,用c#序列化的对象可以被java反序列化。
  • RPC远程接口调用

二,常见得序列化方式

1. JSON序列化:将数据结构转换为JSON(JavaScript Object Notation)格式的字符串。这是一种轻量级的数据交换格式,广泛应用于各种编程语言和应用中。

2. XML序列化:将数据结构转换为XML(eXtensible Markup Language)格式的字符串。XML是一种标记语言,用于描述数据和文档的结构,适用于跨平台和跨语言通信。

3. Protocol Buffers(protobuf)序列化:是一种由Google开发的二进制数据序列化格式。它具有高效的编码和解码性能,可以用于高效地在网络上传输数据。

4. MessagePack序列化:是一种二进制序列化格式,它比JSON更紧凑,也比XML更高效,适用于数据的快速序列化和反序列化。

5. YAML序列化:是一种人类可读的数据序列化格式,它类似于JSON,但具有更简洁和易读的语法,常用于配置文件和数据交换。

6. BSON序列化:是一种二进制JSON格式,用于在MongoDB数据库中存储和交换数据。

7. Java对象序列化:Java提供了一种将Java对象转换为字节流的机制,以便在网络传输或存储时使用。这种序列化方式可以通过实现`java.io.Serializable`接口来实现。

8. XML-RPC和SOAP:这是一种通过HTTP协议传输数据的远程过程调用(RPC)机制,数据会被序列化为XML格式进行传输。

每种序列化方式都有其优缺点,选择合适的方式取决于具体的应用场景和需求。例如,JSON和XML适用于前后端数据交互,Protocol Buffers和MessagePack适用于高性能的数据序列化,而Java对象序列化在Java应用内部可以方便地进行对象持久化和传输。

上边这几种主要说一些几个比较重要的突出的,(1)第一个json,这个没啥说的,web前端和后端的交互使用的都是json格式数据传输的,(2)还有一个java的序列化,这个常见得就是我们把前端传过来的数据存到数据库或者别的地方,需要我们使用这个序列化方式,需要序列化的对象必须实现serializable (3)Protocol Buffers 谷歌提供的一种序列化方式,我们可以用它代理json进行数据传输,性能会极大的提高,只不过使用起来可能比较麻烦,这里给大家提供一个Protocol Buffers的序列化库---Protostuff,使用它的好处:

Protostuff是一个Java序列化/反序列化库,它专门用于将Java对象转换为Protocol Buffers格式的二进制数据,或将Protocol Buffers格式的二进制数据反序列化为Java对象。它的目标是提供高性能和高效的数据序列化和反序列化功能。

与Google官方提供的Protocol Buffers库相比,Protostuff具有一些特点:

1. 无需.proto定义文件:Protostuff不需要预先定义.proto文件来描述消息结构。它通过Java对象的反射来实现序列化和反序列化,从而省略了定义.proto文件的步骤。

2. 省略代码生成步骤:与Google官方的Protocol Buffers库需要使用`protoc`工具生成Java类不同,Protostuff不需要代码生成步骤。这使得使用Protostuff更加简单和直观。

3. 支持JDK原生序列化:除了支持Protocol Buffers格式的二进制数据外,Protostuff还支持JDK原生的Java序列化格式。这使得在不同的序列化格式之间切换更加灵活。

4. 提供多种集成方式:Protostuff可以与其他Java框架和库(如Spring)无缝集成,使其在现有Java项目中更易于使用。

由于Protostuff使用了反射机制来进行序列化和反序列化,因此在某些情况下可能会对性能产生一定的影响。但它通常在性能上表现出色,特别是在序列化复杂对象和处理大量数据时,Protostuff的性能优势可能会更明显。

总的来说,Protostuff是一个非常有用的Java序列化/反序列化库,特别适用于需要高性能、无需预先定义.proto文件以及与现有Java项目无缝集成的情况。

官网protostuff home

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

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

相关文章

【数据结构】_1.集合与复杂度

目录 1. 集合框架 2. 时间复杂度 2.1 时间复杂度和空间复杂度 2.2 时间复杂度的概念 2.3 大O的渐进表示法 2.3.1 精确的时间复杂度表达式 2.3.2 大O渐进表示法的三条规则 2.3.3 时间复杂度的最好、平均与最坏情况 2.4 时间复杂度计算示例 3.空间复杂度 1. 集合框架 …

字节跳动后端面试,笔试部分

var code "7022f444-ded0-477c-9afe-26812ca8e7cb" 背景 笔者在刷B站的时候,看到了一个关于面试的实录,前半段是八股文,后半段是笔试部分,感觉笔试部分的题目还是挺有意思的,特此记录一下。 笔试部分 问…

【多线程例题】顺序打印abc线程

顺序打印-进阶版 方法一:三个线程竞争同一个锁,通过count判断是否打印 方法二:三个线程同时start,分别上锁,从a开始,打印后唤醒b 三个线程分别打印A,B,C 方法一:通过co…

JavaFX中MVC例子理解

JavaFX可以让你使用GUI组件创建桌面应用程序。一个GUI应用程序执行三个任务:接受用户的输入,处理输入,并显示输出。而一个GUI应用程序包含两个 类型的代码: 领域代码。处理特定领域的数据和遵循业务规范。交互代码。处理用户输入…

【Linux】多线程(上)

本文详细介绍了多线程的常见概念 生产者消费者模型将在多线程(下)继续讲解 欢迎大家指正 提起讨论进步啊 目录 多线程的理解 线程的优点 线程的缺点: 线程的用途 线程VS进程 用户级线程库 POSIX线程库 线程创建: 线程…

springboot整合jwt

JWT介绍 JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获…

DICOM开源库兼容性问题

常见的DICOM开源库有dcmtk、fo-dicom、dcm4che3等,DICOM开源库遇到的兼容性问题类似,——dcmtk兼容性最强,fo-dicom次之,dcm4che3最差。 本人在dicom医学影像方面从事软件开发已有10几年,用过dcmtk,fo-dico…

Android国际化各国语言简写

<?xml version"1.0" encoding"utf-8"?> <locale-config xmlns:android"http://schemas.android.com/apk/res/android"><locale android:name"af"/> <!-- 南非荷兰语 --><locale android:name"am&qu…

Spark(32):Spark性能调优之Shuffle调优

目录 0. 相关文章链接 1. 调节 map 端缓冲区大小 2. 调节 reduce 端拉取数据缓冲区大小 3. 调节 reduce 端拉取数据重试次数 4. 调节 reduce 端拉取数据等待间隔 5. 调节 SortShuffle 排序操作阈值 0. 相关文章链接 Spark文章汇总 1. 调节 map 端缓冲区大小 在 Spark 任…

基于.net6的WPF程序使用SignalR进行通信

之前写的SignalR通信&#xff0c;是基于.net6api&#xff0c;BS和CS进行通信的。 .net6API使用SignalRvue3聊天WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信&#xff0c;后台服务使用.net6api 。其实和之前写的差不多&#xff0c;主要在…

Ubuntu22.04密码忘记怎么办 Ubuntu重置root密码方法

在Ubuntu 22.04 或其他更高版本上不小心忘记root或其他账户的密码怎么办&#xff1f; 首先uname -r查看当前系统正在使用的内核版本&#xff0c;记下来 前提&#xff1a;是你的本地电脑&#xff0c;有物理访问权限。其他如远程登录的不适用这套改密方法。 通过以下步骤&#…

写字楼/办公楼能源管理系统的具体应用 安科瑞 许敏

0 引言 随着社会的进步&#xff0c;我国经济的快速发展&#xff0c;企业的办公环境和方式发生了巨大的变化&#xff0c;专业的写字楼在各大城市遍布林立。写字楼的出现使得各地企业办公集中化、高效化&#xff0c;然而写字楼物业管理的同步发展对于企业服务来说更是一个很大的…

SciencePub学术 | 区块链类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 区块链类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; SCI-01 【期刊简介】IF&#xff1a;4.0-4.5&#xff0c;JCR2区&#xff0c;中科院3区&#xff1b; 【检索情况】SCIE&EI双检&…

Mysql+ETLCloud CDC+StarRocks实时数仓同步实战

一、业务需求及其痛点 大型企业需要对各种业务系统中的销售及营销数据进行实时同步分析&#xff0c;例如库存信息、对帐信号、会员信息、广告投放信息&#xff0c;生产进度信息等等&#xff0c;这些统计分析信息可以实时同步到StarRocks中进行分析和统计&#xff0c;StarRocks…

vue注意点:$attrs、$slots!插槽

$attrs 当父组件给子组件传值&#xff0c;子组件并没有接收数据时&#xff0c;此时数据在$attrs中可以拿到&#xff0c;并且如果子组件不需要使用数据&#xff0c;而孙组件需要&#xff0c;则可以直接v-bind"$attrs"传给孙。 <-- 父组件 --> <div><…

[java安全]URLDNS

文章目录 [java安全]URLDNS前言HashMapURLURLStreamHandler调用过程调用链流程图POC [java安全]URLDNS 前言 URLDNS利用链是一条很简单的链子&#xff0c;可以用来查看java反序列化是否存在反序列化漏洞&#xff0c;如果存在&#xff0c;就会触发dns查询请求 它有如下优点&a…

Centos 8 / TencentOS Server 3.1 安装 docker-ce

目录 前言安装 docker-ce设置Docker Hub 镜像缓存参考 前言 TencentOS Server 3.1(与 CentOS 8用户态完全兼容&#xff0c;配套基于社区5.4 LTS 内核深度优化的 tkernel4版本) 安装 docker-ce 先卸载老版本&#xff0c;没有老版本的跳过 yum remove docker \docker-client \d…

vue3学习

响应式数据 const searchFormState reactive({})const searchFormRef ref()两者差不多&#xff0c;reactive(&#xff09;多用于复杂数据结构 ref()多用与简单数据结构 组件传值父传子 属性传值 父组件给子组件传值属性aa值为data :aa"data" 子组件接收数据方法 引…

常见面试题之HashMap

1. 二叉树 1.1 二叉树概述 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只有左子节点&#xff0c;有的节…

前端基本功 用 React Hooks + Antd 实现一个 Todo-List

背景 使用 React Hooks 以及组件库 Antd 来实现一个可以 增删 标记是否完成 的 todo-list 思路 要实现一个 todo-list 首先想到用 useState 维护一个状态数组来保存当前 list &#xff0c;还要用一个状态维护添加框中的内容 const [todos, setTodos] useState(initialValu…