美文网首页
序列化相关

序列化相关

作者: 瑜小贤 | 来源:发表于2020-04-09 14:55 被阅读0次

定义及相关概念

  1. 由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层,系统不认识对象,只认识字节序列,而为了达到进程通讯的目的,需要先将数据序列化,而序列化就是将对象转化为字节序列的过程。相反的,当字节序列被运到相应的进程的时候,进程为了识别这些数据,就要将其反序列化,即把字节序列转化为对象
  2. 无论是在进程间通信,本地数据存储亦或是网络数据传输都离不开序列化的支持。而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响。
  3. 从广义上讲,数据序列化就是将数据结构或者是对象转换成我们可以存储或传输数据格式的一个过程,在序列化过程中数据结构或对象将其状态信息写入到临时或者永久性的存储区中,而在对应的反序列化过程中,则可以说是生成的数据被还原成数据结构或对象的过程。
  4. 这样来说,数据序列化相当于是将我们原先的对象序列化概念做出了扩展,在对象序列化和反序列化中,我们熟知的有两种方法:
    (1)是Java语言中提供的Serializable接口
    (2)是Android提供的Parcelable接口。
    而在这里,因为我们对这个概念做出了扩展,因此也需要考虑几种专门针对数据结构进行序列化的方法,如现在那些开放API一般返回的数据都是JSON格式,又或者是我们Android原生的SQLite数据库来实现数据的本地存储,从广义上来说,这些都可以算作是数据的序列化。

目的

  • 序列化:主要用于网络传输,数据持久化,一般序列化也成为编码(encode)
  • 反序列化:主要用于从网络、磁盘上读取字节数组还原成原始对象,一般反序列化也称为解码(Decode)
    具体的讲:
  • 永久的保存对象数据(将对象数据保存在文件当中,或者磁盘中)
  • 通过序列化操作将对象数据再网络上进行传输(由于网络传输是以字节流的方式对数据进行传输的,因此序列化的目的是将对象数据转换成字节流的形式)
  • 将对象数据再进程间进行传递(Activity之间传递对象数据时,需要在当前的Activity中对对象数据进行序列化操作,在另一个Activity中需要进行反序列化操作将数据取出)
  • Java平台允许我们在内存中创建可复用的Java对象,但在一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长(即每个对象都在JVM中)。但在现实应用中,就可能要停止JVM运行,但有时些要保存某些指定的对象,并在将来重新读取被保存的对象。这时Java对象序列化就能够实现该功能。(可选择入数据库、文件形式保存)
  • 序列化对象的时候只是针对变量进行序列化,不针对方法进行序列化
  • 在Intent之间,基本的数据类型直接进行相关传递即可,但是一旦数据类型比较复杂的时候,就需要进行序列化操作了。

常见的序列化/反序列化协议

XML&SOAP

XML是一种常用的序列化和反序列化协议,具有跨机器,跨语言等优点
SOAP(Simple Object Access Protocol)是一种被广泛应用的,基于XML为序列化和反序列化协议的结构化消息传递协议。

JSON(Javascript Object Notation)

JSON起源于弱类型语言Javascript,它的产生来自于一种称之为“Associative array”的概念,起本质就是采用“Attribute-value”的方式来描述对象。实际上在Javascript和PHP等弱类型语言中,类的描述方式就是Associative array。JSON的如下优点,使得它成为最广泛使用的序列化协议之一。

  • 这种Associative array格式非常符合工程师对对象的理解
  • 它保持了XML的人眼可读(Human-readable)的优点
  • 相对于XML而言,序列化后的数据更加简洁。(XML所产生的序列化之后文件大小接近JSON的两倍)
  • 它具备Javascript的先天性支持,所以被广泛应用于Web Browser的应用场景中,是Ajax的实施标准协议。
  • 与XML相比,其协议比较简单,解析速度比较快
  • 松散的Associative array使得其有良好的可扩展性和兼容性。

Protobuf

Protobuf具备了优秀的序列化协议所需的众多典型特征

  • 标准的IDL和IDL编译期,这使得其对工程师非常友好
  • 序列化数据非常简洁,紧凑,与XML相比,其序列化之后的数据量约为1/3到1/10
  • 解析速度非常快,比对应的XML快约20-100倍
  • 提供了非常友好的动态库,使用非常简洁,反序列化只需要一行代码

相关文章

  • Java 序列化 之 单例模式

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • java 序列化 原理解析

    序列化相关文章: Java 序列化 之 Serializable Java 序列化之 Externalizable...

  • Java 序列化之 Externalizable

    相关文章: Java 序列化 之 Serializable JDK中除了提供 Serializable 序列化接口...

  • 什么是序列化?常见的序列化协议有哪些?

    序列化和反序列化相关概念 什么是序列化?什么是反序列化? 如果我们需要持久化 Java 对象比如将 Java 对象...

  • Java基础18:Java序列化与反序列化

    本文介绍了Java序列化的基本概念,序列化和反序列化的使用方法,以及实现原理等,比较全面地总结序列化相关知识点,并...

  • 序列化相关

    基本概念 序列化(编码)是将对象序列化为二进制形式(字节数组),主要用于网络传输、数据持久化等;反序列化(解码)则...

  • 序列化相关

    定义及相关概念 由于在系统底层,数据的传输形式是简单的字节序列形式传递,即在底层,系统不认识对象,只认识字节序列,...

  • Android IPC机制2-AIDL的使用

    相关概念 序列化 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deseria...

  • 序列化总结

    序列化总结 定义以及相关概念 序列化 将数据结构或者对象转成二进制串的过程 反序列化 将在序列化过程中所生成的二进...

  • python序列化模块json和pickle

    序列化相关 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化...

网友评论

      本文标题:序列化相关

      本文链接:https://www.haomeiwen.com/subject/xcsxmhtx.html