概述
序列化就是把一個對象變成一個數據流,然後可以通過讀寫的方式那進行存儲、傳輸、恢復.在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 用於進程間通信