前言
在系统底层,数据的传输形式是以简单的字节序列形式传递,因此在底层,系统是不认识对象,只认识字节序列,为了达到进程通讯目的,需要先将数据序列化,而序列化就是将对象转化字节序列的过程
;
定义
序列化:
将数据结构或对象转换成二进制串的过程;(java中二进制串对应的就是byte[])
反序列化:
将在序列化过程中生成的二进制串转换成数据结构或对象的过程;
目的
序列化目的:
主要用于网络传输、数据持久化;
反序列化目的:
主要用于从网络、磁盘上读取字节数组还原成原始对象使用;
序列化协议特性
通用性
,是否支持跨平台、跨语言,如果不支持,通用性就大大降低;健壮性/鲁棒性
,是否成熟,是否稳定;可读性
性能
,一般包括空间开销和时间开销;可扩展性
安全性
几种常见的序列化协议
XML&SOAP
JSON
Protobuf
Serializable
Parcelable
Android序列化
Serializable:
是Java中的序列化接口,使用简单但开销大(因为序列化过程中使用了反射机制,会产生大量的临时变量),并且在读写数据过程中,通过IO流形式将数据写入到硬盘或传输到网络上,会产生大量的IO操作;
Parcelable:
是Android中特有的序列化接口,是以Binder作为信息载体,内存开销小,因此在内存间进行数据传递时,推荐使用Parcelable
,而Parcelable
对数据进行持久化或者网络传输时操作复杂,这时候推荐使用Serializable
;