1、對象序列化
1.1、永久性保存對象,保存對象的字節序列到本地文件中;
1.2、用過序列化對象在網絡中傳遞對象;
1.3、通過序列化對象在進程間傳遞對象。
2、實現Serializable接口(java)
Serializable的作用是將數據對象存入字節流當中,在需要時重新生成對象,
主要應用是利用外部存儲設備保存對象狀態,以及通過網絡傳輸對象等。
///Serializable在序列化的時候會產生大量的臨時變量,從而引起頻繁的GC。
3、Android中的新的序列化機制–Parcelable接口
Parcel的序列化和反序列化的讀寫全是在內存中進行
///在常使用Parcel類的場景就是在Activity間傳遞數據。在Activity間使用Intent傳遞數據的時候,可以通過Parcelable機制傳遞複雜的對象。
///Intent傳值的案例:
package com.example.intent_object;
import android.os.Parcel;
import android.os.Parcelable;
public class User implements Parcelable {
public String name;
public int age;
// 必須要創建一個名叫CREATOR的常量。
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
@Override
public User createFromParcel(Parcel source) {
return new User(source);
}
//重寫createFromParcel方法,創建並返回一個獲得了數據的user對象
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public String toString() {
return name + ":" + age;
}
// 無參數構造器方法,供外界創建類的實例時調用
public User() {
}
// 帶參構造器方法私用化,本構造器僅供類的方法createFromParcel調用
private User(Parcel source) {
name = source.readString();
age = source.readInt();
}
@Override
public int describeContents() {
return 0;
}
// 將對象中的屬性保存至目標對象dest中
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
//省略getter/setter }
///////其他類型:
(1)/boolean
writeToParcel:
dest.writeInt(isHasSign ? 1 : 0);
(2)/CREATOR
profile.setHasSign(source.readInt() == 1 ? true : false);
(3)/List
dest.writeList(photos);
profile.setPhotos(source.readArrayList(NearByPeopleProfile.class
.getClassLoader()));
(4)、實例:
package com.test.parcelable;
import java.util.List;
import java.util.Map;
import android.os.Parcel;
import android.os.Parcelable;
/**
* 照片內容數據的實�?
*
* @author rendongwei
*
*/
public class PhotoDetailResult implements Parcelable {
/**
* 照片的編�?
*/
private int image;
/**
* 照片的上傳時�?
*/
private String time;
/**
* 照片的描�?
*/
private String description;
/**
* 照片的評論數�?
*/
private int comment_count;
/**
* 照片的贊數量
*/
private int like_count;
/**
* 照片的評�?
*/
private List<Map<String, Object>> comments;
private boolean isbool;
private List list;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public boolean isIsbool() {
return isbool;
}
public void setIsbool(boolean isbool) {
this.isbool = isbool;
}
public int getImage() {
return image;
}
public void setImage(int image) {
this.image = image;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public int getComment_count() {
return comment_count;
}
public void setComment_count(int comment_count) {
this.comment_count = comment_count;
}
public int getLike_count() {
return like_count;
}
public void setLike_count(int like_count) {
this.like_count = like_count;
}
public List<Map<String, Object>> getComments() {
return comments;
}
public void setComments(List<Map<String, Object>> comments) {
this.comments = comments;
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(image);
dest.writeInt(comment_count);
dest.writeInt(like_count);
dest.writeString(time);
dest.writeString(description);
dest.writeList(comments);
dest.writeInt(isbool ? 1 : 0);
dest.writeList(list);
}
public static final Parcelable.Creator<PhotoDetailResult> CREATOR = new Parcelable.Creator<PhotoDetailResult>() {
@SuppressWarnings("unchecked")
public PhotoDetailResult createFromParcel(Parcel source) {
PhotoDetailResult result = new PhotoDetailResult();
result.setImage(source.readInt());
result.setComment_count(source.readInt());
result.setLike_count(source.readInt());
result.setTime(source.readString());
result.setDescription(source.readString());
result.setComments(source.readArrayList(PhotoDetailResult.class
.getClassLoader()));
result.setIsbool(source.readInt() == 1 ? true : false);
result.setList(source.readArrayList(PhotoDetailResult.class
.getClassLoader()));
return result;
}
public PhotoDetailResult[] newArray(int size) {
return new PhotoDetailResult[size];
}
};
}