序列化是指把Java對象轉換爲字節序列並存儲到一個存儲媒介的過程。反之,把字節序列恢復爲Java對象的過程則稱之爲反序列化。 android
Java對象存在的一個前提是JVM有在運行,所以,若是JVM沒有運行或者在其餘機器的JVM上是不可能獲取到指定的Java對象的。而序列化操做則是把Java對象信息保存到存儲媒介,能夠在以上不可能的狀況下仍然可使用Java對象。
因此,序列化的主要做用是:數據庫
在Android開發中,常常須要在多個部件(Activity、Fragment或Service)之間經過Intent傳遞一些數據,若是是一些普通類型的數據能夠經過PutExtra()進行傳遞,若是是對象的話就得先進行序列化才能傳遞了。在Android中有兩種序列化的接口,Serializable和Parcelable。網絡
Parcelable的效率會比Serializable高,數據僅存在於內存中。;而Serializable由於使用到了反射,會相對慢一些,所以,只在內存間傳遞數據的話推薦用Parcelable,而若是是要進行保存或者網絡傳輸則選擇Serializable。ide
只須要實現Serializable接口,並提供一個序列化版本id(serialVersionUID)便可。this
public class DataBean implements Serializable{ ... }
Parcelable實現方式略複雜一些,需重寫describeContents和writeToParcel這兩個方法提供一個名爲CREATOR常量。實際上就是將如何打包和解包的工做本身來定義,
而序列化的這些操做徹底由底層實現。設計
public class DataBean implements Parcelable{ private int id; private String name; private String Account; private int kind; private String password; private String desc; public DataBean(){} // 用來建立自定義的Parcelable的對象 public static final Creator<DataBean> CREATOR = new Creator<DataBean>() { @Override public DataBean createFromParcel(Parcel in) { return new DataBean(in); } @Override public DataBean[] newArray(int size) { return new DataBean[size]; } }; //GET SET方法 ... @Override public String toString() { return "DataBean{" + "id=" + id + ", name='" + name + '\'' + ", Account='" + Account + '\'' + ", kind=" + kind + ", password='" + password + '\'' + ", desc='" + desc + '\'' + '}'; } @Override public int describeContents() { return 0; } // 寫數據進行保存 @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.id); dest.writeString(this.Account); dest.writeString(this.name); dest.writeString(this.password); dest.writeInt(this.kind); dest.writeString(this.desc); } // 讀數據進行恢復 protected DataBean(Parcel in) { this.id = in.readInt(); this.kind = in.readInt(); this.password = in.readString(); this.name = in.readString(); this.Account = in.readString(); this.desc = in.readString(); } }
這樣就完成了對DataBean的序列化,使用的時候就能夠經過Intent進行傳遞了。code
//Activity傳遞對象,無論是實現哪一個接口都是用以下方式傳遞 intent.putExtra("data",data); //在另外一個Activity中接收對象的方式分別是: DataBean data = getIntent().getSerializableExtra("data"); DataBean data = getIntent().getParcelableExtra("data");
Android中序列化的使用大體就是這樣了。對象
更多文章也可關注個人靜態博客,更新相對會優先些傳送門接口