关于序列化
https://blog.csdn.net/zy_jibai/article/details/80700710
1、Parcelable 和 Serializable 有什么用,它们有什么差别?
将对象转化为二进制流方法,主要运用在:
- 存储到文本或者本地数据库的这类数据持久化操作
- 网络传输
- 内存中数据调用(Intent)
我们知道在Java应用程序当中对类进行序列化操作只需要实现Serializable接口就可以,由系统来完成序列化和反序列化操作,但是在Android中序列化操作有另外一种方式来完成,那就是实现Parcelable接口.不仅仅需要声明,还需要实现内部的相应方法。也是Android中特有的接口来实现类的序列化操作.原因是Parcelable的性能要强于Serializable.因此在绝大多数的情况下,Android还是推荐使用Parcelable来完成对类的序列化操作的.
3.Parcelable与Serializable的性能比较
首先Parcelable的性能要强于Serializable的原因我需要简单的阐述一下
1). 在内存的使用中,前者在性能方面要强于后者
2). 后者在序列化操作的时候会产生大量的临时变量,(原因是使用了反射机制)从而导致GC的频繁调用,因此在性能上会稍微逊色
3). Parcelable是以Ibinder作为信息载体的.在内存上的开销比较小,因此在内存之间进行数据传递的时候,Android推荐使用Parcelable,既然是内存方面比价有优势,那么自然就要优先选择.
4). 在读写数据的时候,Parcelable是在内存中直接进行读写,而Serializable是通过使用IO流的形式将数据读写入在硬盘上.
但是:虽然Parcelable的性能要强于Serializable,但是仍然有特殊的情况需要使用Serializable,而不去使用Parcelable,因为Parcelable无法将数据进行持久化,因此在将数据保存在磁盘的时候,仍然需要使用后者,因为前者无法很好的将数据进行持久化.(原因是在不同的Android版本当中,Parcelable可能会不同,因此数据的持久化方面仍然是使用Serializable)
2、自定义一个类让其实现 Parcelable,大致流程是什么?
重写describeContents方法。
重写writeToParcel方法,这个方法是我们将对象序列化的方法。
实现Creator类,并实现createFromParcel方法和newArray方法,newArray方法不是很重要,主要看createFromParcel方法,这个方法是我们反序列化得到对象的方法。