什么是序列化?
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式(二进制字节流)的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
- 序列化:内存中的对象 -> 磁盘
- 反序列化:磁盘 -> 内存中的对象
序列化方式
- Serializable: java提供的
- Parcelable:android提供的
Serializable和Parcelable的区别
-
存储媒介
Serializable使用IO读写存储在硬盘上。序列化过程使用了反射技术,并且期间产生临时对象。优点实现简单,缺点性能低。
Parcelable是直接在一块共享内存中读写。优点性能好,缺点实现复杂。 -
使用场景
Serializable:持久化,网络传输或者本地文件存储
Parcelable:临时内存中传输,比如activity间的传输
Serializable使用注意事项
- Serializable在是实现时需要设置serialVersionUID,作用是验证版本的一致性。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较。如果相同说明是一致的,可以进行反序列化,否则会出现反序列化版本不一致的异常,即是InvalidCastException。
- serialVersionUID两种显示的生成方式:
1.默认1L,比如:private static final long serialVersionUID = 1L;
2.根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = xxxxL; - Seralizable无法序列化静态变量,使用transient修饰的对象也无法序列化。
- 当父类实现序列化,子类自动实现序列化。
网友评论