序列化与反序列化

1.概念:

        序列化
                将数据结构或对象转换成二进制串的过程。
        反序列化
                将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。

2.作用:

        主要用于网络传输,数据的持久化

3.方式:

        1.java中的Serializable

        Serializable是 Java 提供的序列化接口,它是一个空接口Serializable 用来标识当前类可以被 ObjectOutputStream 序列化,以及被 ObjectInputStream 反序列化。
        
        注意点:
        1)为什么需要使用serialVersionUID?      
        serialVersionUID 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会报错: InvalidClassException,如果添加此字段,版本不变,在成员变化时依然可以反序列化之前序列化的数据
        
        2)部分字段不想被序列化怎么办?
        用transient关键字标记的成员变量不参与序列化,可以在存储数据时有效过滤掉敏感数据。
        3)子类实现Serializable,而父类未实现的情况
        父类成员变量不会被序列化。
        4)父类实现子类能否使用序列化,如果不想子类能序列化怎么处理?
        重新读写方法,抛出异常
        5)静态变量会不会被序列化?
         静态成员变量属于类不属于对象,所以不会参与序列化(对象序列化保存的是对象的“状态”,也就是它的成员变量,因此序列化不会关注静态变量)
        2.android的Parcelable

        需要实现三个方法:

        描述当前Parcelable实例的对象类型
        public int describeContents (){}
        写方法
        public void writeToParcel ( Parcel dest , int flags ){}
        读方法
        Parcelable . Creator < bean > CREATOR = new Parcelable . Creator < bean > (){}
        
        3.其他方式JSON、XML&SOAP、Protobuf

4.性能比较总结描述

        首先Parcelable 的性能要强于 Serializable的原因我需要简单的阐述一下在内存的使用中 ,前者在性能方面要强于后者后者在序列化操作的时候会产生大量的临时变量 ,( 原因是使用了反射机制 ) 从而导致 GC的频繁调用,因此在性能上会稍微逊色Parcelable 是以 Ibinder 作为信息载体的 . 在内存上的开销比较小 ,因此在内存之间进行数据传递的时候 ,Android 推荐使用 Parcelable, 既然是内存方面比价有优势 , 那么自然就要优先选择.在读写数据的时候 ,Parcelable 是在内存中直接进行读写 , Serializable 是通过使用 IO流的形式将数据读写入在硬盘上.但是:虽然 Parcelable 的性能要强于 Serializable, 但是仍然有特殊的情况需要使用 Serializable,而不去使用 Parcelable, 因为 Parcelable 无法将数据进行持久化 , 因此在将数据保存在磁盘的时候 ,仍然需要使用后者 , 因为前者无法很好的将数据进行持久化 .( 原因是在不同的 Android 版本当中,Parcelable可能会不同 , 因此数据的持久化方面仍然是使用 Serializable)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值