关于序列化的认识(一)

2019-07-29  本文已影响0人  黄金矿工00七

本篇主要就序列化的认识进行说明,不就某种序列化方式进行深入。

什么是序列化?

      序列化对于大部分开发人员是一个熟悉又遥远的词,我们经常要用到序列化,但是又不清楚为什么要序列化。我们以Java提供的序列化机制为例,它可以将对象的状态信息转变为二进制数据,实际上这个过程就是将内存中的数据转换为某种可持久化或者可传输的格式的过程。这也是序列化的过程,反之反序列化则是将数据重新读入内存的过程。

为什么需要序列化?

      这个问题也是大多数人最想知道的一个问题,同样我还是以Java为例,我们知道,Java程序的运行时依赖于JVM的,只有jvmJVM的时候,对象才可能存在(这里说的对象是内存中的对象,而非以某种形式持久化存在的),也就是说对象的生命周期是不会超过JVM生命周期的,但是我们往往需要希望能够在JVM停止运行后保存对象的状态,以便在别的地方使用。这也是序列化的第一个作用,将对象字节序列持久化。
      对于现在的大多数应用来说,都是网络应用,那么这就需要进行网络传输,我们知道,对象是存在于内存中的,显然是无法进行网络传输的,所以我们需要以一种方式来传输对象,这也是序列化的第二个作用。
总结:序列化实际上是为了让内存中的对象或者数据结构以一种可以存储和传输的格式存在。

序列化的方式

序列化的方式主要是两种,文本方式与二进制方式,如何进行选择也是很重要的一点,我主要考虑以下方面,

二进制序列化的数据因为是严格的内存到对象的转换,所以要求发送方与接收方的的机器字节序保持一致,否则无法正确解析。而文本格式的数据对于消息的发送方和接收方的采用的编程语言没有严格的限制,对于多语言编写提供了便利。

时间开销(Complexity),以Java为例,某些序列化方式需要依赖反射,往往会导致比较长时间的解析时间,这可能会成为应用的瓶颈。

参考文献:
https://www.infoq.cn/article/serialization-and-deserialization
http://cn.voidcc.com/question/p-prmzkbxa-mb.html
https://www.liaoxuefeng.com/wiki/1016959663602400/1017624706151424
https://studygolang.com/articles/7855
https://hhbbz.github.io/2017/06/25/%E4%BB%8EDubbo%E6%B5%85%E8%B0%88RPC%E5%92%8CHTTP/

上一篇下一篇

猜你喜欢

热点阅读