Android序列化

Android序列化,第1张

Parcelable是android.os.Parcelable提供的Android平台进行序列化的接口。在writeToParcel()通过底层Parcel中一些列write()方法完成序列化;在YourParcelable.CREATOR内部如何创建序列化对象和数组,通过Parcel中一些列read()方法完成反序列化;describeContents()完成内容描述功能。

1. 继承Parcelable接口;

2. 覆写describeContents()、writeToParcel()方法(Implement methods);

3. 添加Parcel形参的构造函数,公有静态常量CREATOR(Add Parcelable Implementation)。

补充:Android Studio插件:Android Parcelable code generator插件。写完实体类后在Generate界面(Alt + Insert键)选择Parcelable一键生成。

Serializable是Java提供的序列化借口,是一个空接口,依赖serialVersionUID将对象序列化到文件或其他中介,反序列化时如果类结构及serialVersionUID匹配就反序列化出对象。采用ObjectOutputStream和ObjectInputStream进行。

1. 序列化前、后的对象内容完全一样,但不是同一个对象;

2. serialVersionUID不是必须指定的。系统会计算当前对象的Hash值尘销将它赋值给serialVersionUID;

3. 如果serialVersionUID不匹配,反序列化时会crash如下异常:java.io.InvalidClassException;

1. 静态成员变量属于类,不会参与序列化过程;

2. 用transient关键字修饰的成员变量不参与序列化过程;

3. 可覆写writeObject()、readObject()改变系统默认的系列化过程;

4. 可使用此类的子类Externalizable对序列化进行自定义控制;

1.Parcelable主要用于内存序列派孝游化,当需要序列化到存储设备或进行网络传输会相对复杂更适用Serializable;

2. 默认的Serializable使用反射消耗性能,可通过自定义writeObject()和readObject()优化性能;

1. 在Android平台中Serializable在Parcel.writeValue()中将慎闹序列化到ByteArrayOutputStream内存中;

2.Serializable在writeObject()和readObject()中直接进行流的读写会绕开反射,提升性能;

3.Serializable只是人们常用磁盘序列化,它也支持其他中介进行。性能并不低。

详细介绍Android中Parcelable的原理和使用方法

Android序列化完全解析(一)-Java Serializable   一个系列的,5*推荐

对Java Serializable(序列化)的理解和总结

Externalizable和Serializable

首先先简单简介下序列化是什么

序列化其实就是一种可以将对象实现永久性存储的一种方式,因为对象对计算机来说只是一片内存区域,内存区域里保存一些数据,相当于我们要将这些内存中的二进制保存文件或者是云端中,然后实现互相能够将对象的状态进行互相传输。

如果大家看不懂的我介绍的话,大家可以简单的理解下维基百科对序列化的介绍。

1.实现Serializable 接口的方式

然后通过io的方式   目前已知wirteObject,readObject 这俩个方式实现序列化和反序列化的一个状态

2.实现Parcelable 接口的方式

实现起来较为复杂,通过Parcel 和Creater 实现序列化和反序列化  

其实这里就不列举 具体实现了  主要想跟大家说一下这俩种实现的优缺点都在哪

1.Serializable的方式  实现起来较为简单,而且应用方式比较多,但是他相对序列化反序化  内存开销比较大  速度较慢

根据Serializable的原理,岩族Serializable 将对象当成一颗树,粗档弊遍历并反射各个节点获取信息。期间产生很多中间变量来保存信息,序列化与反序列化过程要创建大量的中间变量来获取、存储数据。而Parcelable则不用,直接将各种需要的数据写入Parcel.cpp中

反射。Serializable使用了大蠢宽量反射,而反射 *** 作耗时。Parcelable使用了非常少的反射 *** 作,来获取入口,而数据,由对象来读入写出,因此省略了Serializable中必要的通过反射才能获取数据的多数时间

存储方式。即数据的存储位置,以及数据本身和助记信息


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12269143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存