什么是序列化
序列化简单来说就保存对象在内存中的状态也可以说是实例化变量。这是Java提供的用来保存 Object state,一种保存对象状态的机制
什么情况下会用到序列化
1、当你想把内存中的对象写入到硬盘时
2、当你想用套接字在网络上传输对象时
一、在Android中使用序列化有两种方式
1、java 序列化 Serializable
实现方式:
实现Serializable接口 并设置序列化
2、Android 序列化 Parcelable
实现方式:
实现Parcelable接口 并实现以下方法:
二、序列化 Serializable与Parcelable的区别
1、读写方面:Serializable是通过使用IO流的形式将数据读写入在硬盘上,而Parcelable则是在内存中直接进行读写。
2、Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC,而Parcelable是以Ibinder作为信息载体的.在内存上的开销比较小
3、Serializable是数据持久化(磁盘)而Parcelable不是数据持久化(内存)
4、Serializable效率低,而Parcelable效率高
总结:如果是在内存中使用序列化用Parcelable,如果是磁盘中使用则用 Serializable
三、关于序列化的几个要注意的地方
1、序列化 ID 的问题
2、静态变量序列化
序列化时,并不保存静态变量,这其实比较容易理解,序列化保存的是对象的状态,静态变量属于类的状态,因此 序列化并不保存静态变量。
3、父类的序列化与 Transient 关键字
4、序列化存储规则
Java 序列化机制为了节省磁盘空间,具有特定的存储规则,当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用,上面增加的 5 字节的存储空间就是新增引用和一些控制信息的空间。反序列化时,恢复引用关系, 指向唯一的对象,二者相等,输出 true。该存储规则极大的节省了存储空间。
参考:https://www.ibm.com/developerworks/cn/java/j-lo-serial/index.html