概述
序列化就是把一个对象变成一个数据流,然后可以通过读写的方式那进行存储、传输、恢复.在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 用于进程间通信