JAVA基础之Serializable和Parcelable接口

https://www.cnblogs.com/jiefeiduan/p/3959411.html

序列化:把对象转换为字节序列的过程称为序列化

反序列化:把字节序列转换为对象的过程称为反序列化

1.为什么要序列化

①永久性保存对象,保存对象的字节序列到本地文件中;

②通过序列化对象在网络中传递对象

③通过序列化在进程中传递对象

2、实现序列化的方法

Android中实现序列化有两种选择:一是实现Serializable接口(是JavaSE本身就支持的),一个是实现Parcelable接口(是Android特有的功能,效率比实现Serializable接口高效,可用于Intent数据传递,也和用于进程间通信IPC)。实现Serializable接口非常简单,声明即可。而实现Parcelable接口稍微复杂一些,但是效率更高,推荐使用来提高性能。

注意:Android中Intent传递对象有两种方法:一是Bundle.putSerializable(key,Object),另一种是Bundle.putParcelabel(key,Object)。当然这些Object是有一定条件的,两者必须实现相应的接口。

3、选择序列化方法的原则

①在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parcelable。

②Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

③Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable在外界有变化的情况下不能很好地保证数据的持续性,虽然Serializable效率低点,但此时还是建议使用Serializable

4、应用场景

实现Serializable

Serializable只需要实现该接口就可以了,系统会自动将其序列化。

Parcelable序列化操作1
Parcelable序列化操作2

将Parcelable看做是流操作,writeToParcelable把对象写到流里面,再通过createFromParcel从流里读取对象,整个过程写的顺序和读的顺序必须一致。

核心:

①实现Parcelabel接口

②重写WriteToParcelable方法,将对象序列化为一个Parcelable对象

③重写describeContent方法,内容接口描述,默认返回0

④实例化静态内部对象CREATOR实现接口Parcelable.Creator

接口中有两个方法:一个是createFromParcelable(Parcel in)实现从Parcel容器中读取传递数据值,封装成Parcel对象返回逻辑层,另一个newArry(int size)创建一个类型为T,长度为size的数组,供外部类反序列化本类数组使用。

5、序列化与反序列化补充

序列化与反序列化

反序列化主要是利用ObjectInputStream和FileInputStream从本地读取字节文件实现反序列化。

你可能感兴趣的:(JAVA基础之Serializable和Parcelable接口)