序列化的两种实现方式Serializable,Parcelable

概述

序列化就是把一个对象变成一个数据流,然后可以通过读写的方式那进行存储、传输、恢复.在android重要有两种方式来实现一个对象的可序列化:

方式一

通过实现Serializable接口类来实现可序列化,Serializable里面没有任何属性和方法,只是一个标记接口,在进行序列化的时候,系统会判断要序列化的这个类(A)是否实现了Serializable接口,如果实现了,这个类就可以进行序列化.

public static final long serialVersionUID = 59852348023l;

serialVersionUID 主要用来判断这个类的结构是否发生了变化,如果相同就说明结构一样可以进行反序列化,如果不同就代表类的结构发生了变化,这个时候的反序列化就只会根据实际情况恢复一些有的属性了.

transient private boolean sex = true;

transient 时一个关键字,主要用于实现了Seriablizable接口的类的属性前面,他的作用是指示这个属性在序列化的时候可以忽略,比如说类A中有一个属性sex,用户不想保存起来,在前面添加transient,这个属性就不会别序列化保存起来了,在恢复的时候,这个属性就会用默认值代替.

写一个实现了Serializble的类

package com.fht.ada.serializble;

import java.io.Serializable;

/**
 * 特点:代码简单,性能低,属于Java 代码简单:用于存储和网络传输
 * 
 * @author Fht
 *
 */
public class User implements Serializable {
    public static final long serialVersionUID = 59852348023l;
    private String name = "fht";
    private int age = 26;
    transient private boolean sex = true;// 不会别序列化
}

序列化:

ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.o"));
oos.writeObject(new User());
oos.close();

反序列化:

ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.o"));
Object o = ois.readObject();
if (o instanceof User) {
    User user = (User) o;
}
ois.close();

特点:
代码简单,性能低,属于Java 用于存储和网络传输

方式二

通过实现Parcelable接口来实现,这种实现的方式稍微有一点复杂,但是他的性能比较高,因此广泛的应用于android中进程间的通信

package com.fht.ada.parcelable;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * 特点:性能高,代码复杂,属于android 性能高:用于进程间通信
 * 
 * @author Fht
 *
 */
public class User implements Parcelable {
    private String name = "fht";
    private int age = 26;
    private boolean sex = true;

    public User(Parcel source) {
        this.name = source.readString();
        this.age = source.readInt();
        this.sex = source.readInt() == 1 ? true : false;
    }

    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeInt(sex ? 1 : 0);
    }

    public static final Parcelable.Creator<User> creator = new Creator<User>() {

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }

        @Override
        public User createFromParcel(Parcel source) {
            return new User(source);
        }
    };
}

特点:
性能高,代码复杂,属于android 用于进程间通信

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值