在Android中实现对象序列化可以通过Serializable和Parcelable
-
Serializable
Serializable是java提供的一个序列化接口,它是一个空接口,使用它来实现对象的序列化很简单,只需要这个类实现Serializable接口,再声明一个serialVersionUID即可,甚至serialVersionUID都不需要声明,serialVersionUID只会对反序列过程有影响。
原则上,只有序列化后的数据中的serialVersionUID和当前类的serialVersionUID一致,才能成功反序列化。
若不手动指定serialVersionUID的值,系统则会根据当前类的结构自动生成它的hash值
静态成员变量不参与序列化过程,其次用transient关键字标识的成员变量不参与序列化过程 -
Parcelable
Parcelable是Android中提供的新的序列化方式,它也是一个接口,序列化的对象可以通过Intent和Binder传递;实现了该接口的包括Intent、Bundle、Bitmap等 -
两者对比
1.Serializable序列化的对象只能通过Intent传递;Parcelable序列化的对象可以通过Intent和Binder传递
2.Serializable使用起来简单但是开销大,序列化和反序列化过程需要大量的I/O操作,会导致应用频繁GC;Parcelable使用起来稍微麻烦点,但是效率很高,这是Android推荐的序列化方式
3.Parcelable主要用在内存序列化上;Serializable主要用于将对象序列化到存储设备上或者将序列化对象通过网络传输
网友评论