前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >www8899922com请拨13116915368欧亚国际序列化与反序序列

www8899922com请拨13116915368欧亚国际序列化与反序序列

原创
作者头像
用户7106032
修改于 2020-03-30 02:34:56
修改于 2020-03-30 02:34:56
1.3K0
举报

序列化与反序列化

序列化:把对象转换为字节序列的过程。

反序列化:把字节序列恢复为对象的过程。

举个例子,在JVM中,对象是以一定形式存在于内存中,然后被JVM识别从而可以以“对象”的方式是用它。那么序列化是什么呢,简单来说就是把内存中的对象的状态先以一种方式导出保存下来以便今后在某地方能够继续使用它。

序列化的组件

IDL(Interface description language)文件:参与通讯的各方需要对通讯的内容需要做相关的约定(Specifications)。为了建立一个与语言和平台无关的约定,这个约定需要采用与具体开发语言、平台无关的语言来进行描述。这种语言被称为接口描述语言(IDL),采用 IDL 撰写的协议约定称之为 IDL 文件。

IDL Compiler:IDL 文件中约定的内容为了在各语言和平台可见,需要有一个编译器,将 IDL 文件转换成各语言对应的动态库。

Stub/Skeleton Lib:负责序列化和反序列化的工作代码。Stub 是一段部署在分布式系统客户端的代码,一方面接收应用层的参数,并对其序列化后通过底层协议栈发送到服务端,另一方面接收服务端序列化后的结果数据,反序列化后交给客户端应用层;Skeleton 部署在服务端,其功能与 Stub 相反,从传输层接收序列化参数,反序列化后交给服务端应用层,并将应用层的执行结果序列化后最终传送给客户端 Stub。

Client/Server:指的是应用层程序代码,他们面对的是 IDL 所生成的特定语言的 class 或 struct。

底层协议栈和互联网:序列化之后的数据通过底层的传输层、网络层、链路层以及物理层协议转换成数字信号在互联网中传递。

方法

XML(eXtensible Markup Language)& SOAP(Simple Object Access protocol)

JSON(Javascript Object Notation)

Avro(Apache)

Thrift(Facebook)

Protobuf(Google)

对于公司间的系统调用,如果性能要求在 100ms 以上的服务,基于 XML 的 SOAP 协议是一个值得考虑的方案。

基于 Web browser 的 Ajax,以及 Mobile app 与服务端之间的通讯,JSON 协议是首选。对于性能要求不太高,或者以动态类型语言为主,或者传输数据载荷很小的的运用场景,JSON 也是非常不错的选择。

对于调试环境比较恶劣的场景,采用 JSON 或 XML 能够极大的提高调试效率,降低系统开发成本。

当对性能和简洁性有极高要求的场景,Protobuf,Thrift,Avro 之间具有一定的竞争关系。

对于 T 级别的数据的持久化应用场景,Protobuf 和 Avro 是首要选择。如果持久化后的数据存储Hadoop 子项目里,Avro 会是更好的选择。

由于 Avro 的设计理念偏向于动态类型语言,对于动态语言为主的应用场景,Avro 是更好的选择。

对于持久层非 Hadoop 项目,以静态类型语言为主的应用场景,

Protobuf 会更符合静态类型语言工程师的开发习惯。

如果需要提供一个完整的 RPC 解决方案,Thrift 是一个好的选择。

如果序列化之后需要支持不同的传输层协议,或者需要跨防火墙访问的高性能场景,Protobuf 可以优先考虑。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java程序员必须知道的常用序列化技术及选型,Protobuf 原理详解
基于 socket 进行对象传输 先举个简单的例子,基于我们前面几次课程的只是,写一个 socket 通信的代码
源码之路
2020/09/04
1.1K0
Java程序员必须知道的常用序列化技术及选型,Protobuf 原理详解
【面试题精讲】常见序列化协议有哪些?
以上是常见的序列化协议,每种协议都有自己的特点和适用场景。在选择序列化协议时,需要考虑数据大小、性能要求、跨语言支持以及易用性等因素。
程序员朱永胜
2023/10/14
3490
RPC 快速入门
RPC 协议的基本原理是客户端调用远程服务器上的函数,并将函数参数传递给服务器。 服务器执行相应的函数逻辑,并将结果返回给客户端。从客户端的角度来看,RPC 调用就像是调用本地函数一样,而不需要关心远程函数的实现和通信细节。简单来说:从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。
蔡不菜丶
2024/04/01
7320
RPC 快速入门
『数据密集型应用系统设计』读书笔记(四)
在大多数情况下,修改应用程序的功能也意味着需要更改其存储的数据: 可能需要使用新的字段或记录类型,或者以新方式展示现有数据。 我们在之前讨论的数据模型有不同的方法来应对这种变化。 当数据格式(format)或模式(schema)发生变化时,通常需要对应用程序代码进行相应的更改。但在大型应用程序中,代码变更通常不会立即完成:
1ess
2021/12/21
1.2K0
『数据密集型应用系统设计』读书笔记(四)
【美团技术团队博客】序列化和反序列化
摘要 序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。恰当的序列化协议不仅可以提高系统的通用性、强健性、安全性、优化系统性能,而且会让系统更加易于调试、便于扩展。本文从多个角度去分析和讲解“序列化和反序列化”,并对比了当前流行的几种序列化协议,期望对读者做
美团技术团队
2018/03/12
2K0
【美团技术团队博客】序列化和反序列化
你真的理解序列化和反序列化吗?
Thrift是Facebook开源提供的一个高性能,轻量级RPC服务框架,其产生正是为了满足当前大数据量、分布式、跨语言、跨平台数据通讯的需求。 但是,Thrift并不仅仅是序列化协议,而是一个RPC框架。相对于JSON和XML而言,Thrift在空间开销和解析性能上有了比较大的提升,对于对性能要求比较高的分布式系统,它是一个优秀的RPC解决方案;但是由于Thrift的序列化被嵌入到Thrift框架里面,Thrift框架本身并没有透出序列化和反序列化接口,这导致其很难和其他传输层协议共同使用(例如HTTP)。
袁新栋-jeff.yuan
2020/08/26
1.5K0
你真的理解序列化和反序列化吗?
彻底服了:Dubbo 夺命28问,真顶不住了
RPC非常重要,很多人面试的时候都挂在了这个地方!你要是还不懂RPC是什么?他的基本原理是什么?你一定要把下边的内容记起来!好好研究一下!特别是文中给出的一张关于RPC的基本流程图,重点中的重点,Dubbo RPC的基本执行流程就是他,RPC框架的基本原理也是他,别说我没告诉你!看了下边的内容你要掌握的内容如下,当然还有很多:
搜云库技术团队
2020/08/12
5480
彻底服了:Dubbo 夺命28问,真顶不住了
Java序列化,看这篇就够了
Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程:
说故事的五公子
2021/02/02
2.6K1
2021最新版BAT大厂Netty面试题集(有详尽答案)
一个高性能、异步事件驱动的 NIO 框架,它提供了对 TCP、UDP 和文件传输的支持 使用更高效的 socket 底层,对 epoll 空轮询引起的 cpu 占用飙升在内部进行了处理,避免 了直接使用 NIO 的陷阱,简化了 NIO 的处理方式。 采用多种 decoder/encoder 支持,对 TCP 粘包/分包进行自动化处理 可使用接受/处理线程池,提高连接效率,对重连、心跳检测的简单支持 可配置IO线程数、TCP参数, TCP接收和发送缓冲区使用直接内存代替堆内存,通过内存 池的方式循环利用 ByteBuf 通过引用计数器及时申请释放不再引用的对象,降低了 GC 频率 使用单线程串行化的方式,高效的 Reactor 线程模型 大量使用了 volitale、使用了 CAS 和原子类、线程安全类的使用、读写锁的使用
JavaEdge
2021/10/18
9020
Dubbo面试题(总结最全面的面试题)
如果是SpringBoot项目就只需要注解,或者开Application配置文件!!!
肉眼品世界
2022/11/29
1.4K0
Dubbo面试题(总结最全面的面试题)
如何选择序列化协议:关键因素与场景分析
序列化协议的选择直接影响着系统的性能、可维护性及跨平台兼容性。以下是针对不同场景下,几种常见序列化协议的选择建议:
终有链响
2024/07/29
1470
如何选择序列化协议:关键因素与场景分析
奈学:一起了解几种序列化协议
序列化(编码)是将对象序列化为二进制形式(字节数组),主要用于网络传输、数据持久化等;而反序列化(解码)则是将从网络、磁盘等读取的字节数组还原成原始对象,主要用于网络传输对象的解码,以便完成远程调用。
江帅帅
2020/08/05
2.8K0
【JAVA反序列化】序列化与反序列化&Java反射&URLDNS链
只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列
没事就要多学习
2024/07/18
1840
【JAVA反序列化】序列化与反序列化&Java反射&URLDNS链
Dubbo面试题(2020最新版)
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
Java架构师必看
2020/04/10
8.9K0
RPC框架:从原理到选型,一文带你搞懂RPC
RPC系列的文章是我去年写的,当时写的比较散,现在重新进行整理。对于想学习RPC框架的同学,通过这篇文章,让你知其然并知其所以然,便于以后技术选型,下面是文章内容目录:
科控物联
2022/06/13
27.8K1
RPC框架:从原理到选型,一文带你搞懂RPC
Go语言入门篇-gRPC基于golang & java简单实现
server端stub又被称为skeleton(骨架)。可以理解为代理类。而实际上基于Java的RPC框架stub基本上也都是使用动态代理。
用户7798898
2020/09/27
1.5K0
Go语言入门篇-gRPC基于golang & java简单实现
精选Dubbo面试题(43题)
简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果
一行Java
2022/04/07
5660
精选Dubbo面试题(43题)
初探Flink的序列化
比如我们要在算子间传递一个Tuple3<Integer, Long, Person>的数据(其中Preson为由id和name组成的pojo类),则subTask对其进行序列化的关键步骤如下。
大数据咖啡屋
2024/11/02
640
初探Flink的序列化
day12 | 深入浅出RPC框架 | 第三届字节跳动青训营笔记
以上步骤只是为了说明原理。事实上编译器经常会做优化,对于参数和返回值少的情况会直接将其存放在寄存器,而不需要压栈弹栈的过程,甚至都不需要调用call,而直接做inline操作。
千羽
2023/01/14
9340
聊聊高性能 RPC框架 gRPC
RPC、gRPC、Thrift、HTTP,大家知道它们之间的联系和区别么?这些都是面试常考的问题,今天带大家先搞懂 RPC 和 gRPC。
码猿技术专栏
2023/05/01
1.9K0
聊聊高性能 RPC框架 gRPC
推荐阅读
相关推荐
Java程序员必须知道的常用序列化技术及选型,Protobuf 原理详解
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文