1、Serializablejava
1. 序列化類Userandroid
public class User implements Serializable{ private static final long serialVersionUID = 212321837362716712L; public int userId; public String userName; public boolean isMale; /** * Ignore getter and setter */ ..... }
2. 序列化過程數組
User user = new User(0,"jake",true); ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt")); out.writeObject(user); out.close();
3. 反序列化過程ide
ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt")); User newUser = (User)in.readObject(); in.close();
由上述代碼能夠看到,this
一、序列化就是將可序列化類寫入到cache.txt文件;線程
二、反序列化過程當中從該文件讀取數據並實例化新的對象
code
三、不指定serialVersionUID也能夠序列化,可是序列化過程會將該標識寫入,反序列化時用於校驗對象
注:靜態成員變量屬於類不屬於對象,不會參與序列化過程;內存
用transient關鍵字標記的成員變量不參與序列化過程。
資源
2、Parcelable
1. 序列化,反序列化 示例類 User.java
package com.android.shieh.processtest.modle; import android.os.Parcel; import android.os.Parcelable; /** * Created by Shieh on 2015/11/26. */ /** * 內存序列化用Parcelable * */ public class User implements Parcelable{ public int userId; public String userName; public boolean isMale; public Book book; public User(int userId, String userName, boolean isMale){ this.userId = userId; this.userName = userName; this.isMale = isMale; } /** * 返回當前對象內容描述 * 幾乎在全部狀況下都返回 0 * 僅噹噹前對象中存在文件描述符時返回 1 * */ @Override public int describeContents() { return 0; } /** * 將當前對象寫入序列化結構,flags能夠爲0或1 * 1:標識當前對象須要做爲返回值返回,不能當即釋放資源 * 0:一般都爲0 * */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(userId); dest.writeString(userName); dest.writeInt(isMale ? 1 : 0); dest.writeParcelable(book, 0); } /** * 反序列化過程 * */ public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>(){ /** * 從序列化後的對象中建立原始對象 * */ @Override public User createFromParcel(Parcel source) { return new User(source); } /** * 建立指定長度的原始對象數組 * */ @Override public User[] newArray(int size) { return new User[size]; } }; private User(Parcel in){ userId = in.readInt(); userName = in.readString(); isMale = in.readInt() == 1; /** * book 是另外一個可序列化對象,因此它的反序列化須要傳遞當前線程的上下文類加載器 */ book = in.readParcelable(Thread.currentThread() .getContextClassLoader()); } }
2. 另外一個可序列化類 Book.java,未實現裏面的方法,初創類就是以下的結構
package com.android.shieh.processtest.modle; import android.os.Parcel; import android.os.Parcelable; /** * Created by Shieh on 2015/11/27. */ public class Book implements Parcelable { protected Book(Parcel in) { } public static final Creator<Book> CREATOR = new Creator<Book>() { @Override public Book createFromParcel(Parcel in) { return new Book(in); } @Override public Book[] newArray(int size) { return new Book[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { } }