Android序列化:Serializable和Parcelable

本文对比了Java中的Serializable接口与Android特有的Parcelable接口。Serializable通过反射实现序列化,简单但效率较低;而Parcelable则需要手动实现序列化逻辑,虽然复杂度增加,但提供了更高的效率和内存节省。

        首先说Serializable,源自JavaSE,它是一种标识接口,继承它的类无须实现什么。Java会通过反射对其实现类进行高效的序列化操作,所以用着很简单。

        缺点:既然是反射,那么它的过程就会较慢,这种机制会在序列化的时候创建许多的临时对象,容易触发垃圾回收。

        还有AIDL不支持Serializable


        而ParcelableAndroid独有的,具体代码如下(有删简掉注释):

/**
 * <p>典型使用案例:</p>
 * 
 * <pre>
 * public class MyParcelable implements Parcelable {
 *     private int mData;
 *
 *     public int describeContents() {
 *         return 0;
 *     }
 *
 *     public void writeToParcel(Parcel out, int flags) {
 *         out.writeInt(mData);
 *     }
 *
 *     public static final Parcelable.Creator<MyParcelable> CREATOR
 *             = new Parcelable.Creator<MyParcelable>() {
 *         public MyParcelable createFromParcel(Parcel in) {
 *             return new MyParcelable(in);
 *         }
 *
 *         public MyParcelable[] newArray(int size) {
 *             return new MyParcelable[size];
 *         }
 *     };
 *     
 *     private MyParcelable(Parcel in) {
 *         mData = in.readInt();
 *     }
 * }</pre>
 */
public interface Parcelable {
    
    public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001;
    
    public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;
    
    public int describeContents();
    
    public void writeToParcel(Parcel dest, int flags);

    public interface Creator<T> {
        public T createFromParcel(Parcel source);
        
        public T[] newArray(int size);
    }
    public interface ClassLoaderCreator<T> extends Creator<T> {
        public T createFromParcel(Parcel source, ClassLoader loader);
    }
}

 

        因为继承Parcelable的类清楚的写明了序列化过程,所以它很快,至少比Serializable快10倍。

        但是同时它因为需要对象的代码高度优化,需要写大量的模板代码,使得对象代码变得难以阅读和维护。

        还有一点必须要提:AIDL通讯时可以使用Parcelable对象。

 

        为了效率和节省内存,多花点时间是值得的!

        建议多使用Parcelable来实现序列化。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

公贵买其鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值