序列化 Serialization
– 将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
简单来说:
-
序列化:把对象转换为字节序列的过程称为对象的序列化。
-
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
序列化的原因基本三种情况:
-
永久性保存对象,保存对象的字节序列到本地文件中;
-
对象在网络中传递;
-
对象在
IPC
间传递。
-
实现
Serializable
接口 -
实现
parcelable
接口
3.1 两种序列化方式的区别:
-
Serializeble
是java
的序列化方式,Parcelable
是Android
特有的序列化方式; -
在使用内存的时候,
Parcelable
比Serializable
性能高,所以推荐使用Parcelable
。 -
Serializable
在序列化的时候会产生大量的临时变量,从而引起频繁的GC
。 -
Parcelable
不能使用在要将数据存储在磁盘上的情况,因为Parcelable
不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable
效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable
。 -
Serializeble
序列化的方式比较简单,直接集成一个接口就好了,而parcelable
方式比较复杂,不仅需要集成Parcelable
接口还需要重写里面的方法。
3.2 两种序列化的使用
Serializable 接口
Serializable 是 Java 提供的序列化接口,它是一个空接口:
public interface Serializable {
}
Serializable 用来标识当前类可以被 ObjectOutputStream
序列化,以及被 ObjectInputStream
反序列化。
Serializable 有以下几个特点:
-
可序列化类中,未实现 Serializable 的属性状态无法被序列化/反序列化
-
也就是说,反序列化一个类的过程中,它的非可序列化的属性将会调用无参构造函数重新创建
-
因此这个属性的无参构造函数必须可以访问,否者运行