您的位置:首页 > 移动开发 > Android开发

Android-序列化,Parcelable,Serializable

2015-01-21 10:11 405 查看
序列化可以将一个对象的状态写入到byte流中,并且可以从其他地方将这个byte流重新构造成原对象。这样让我们可以通过网络传递对象,可以将对象固化,写入数据库。

在Android中Intent可以传递序列化对象。

bundle.putSerializable("objectA", objA);
bundle.putParcelable("objectB", objB);


在Android中有两种序列化方式

public class ObjectB implements Parcelable


public class ObjectA implements Serializable


Android推荐使用Parcelable:

在使用内存时,Parcelable的性能更高。使用Serializable时,会产生大量的临时变量,频繁的引起系统GC。但是,如果需要将对象存储在磁盘上的时候,需要使用Serializable,因为Parcelable不能很好的保持数据的持续性。

在使用Parcelable时需要注意:

写入的顺序和读取的顺序要一致,boolean类型要做处理,这行代码中的static final一个不能少CREATOR一定要大写。

public static final Parcelable.Creator<T> CREATOR


下面是一个Parcelable的例子:

package com.sunrui.testb;

import android.os.Parcel;
import android.os.Parcelable;

public class ObjectB implements Parcelable {

private String name;

private int age;

private boolean flag;

public ObjectB() {
}

// 读取的顺序要和写入的顺序保持一致
public ObjectB(Parcel source) {
name = source.readString();
age = source.readInt();
int i = source.readInt();
if (i == 1) {
flag = true;
} else if (i == 0) {
flag = false;
}
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public boolean isFlag() {
return flag;
}

public void setFlag(boolean flag) {
this.flag = flag;
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
// boolean类型需要特殊处理
if (flag) {
dest.writeInt(1);
} else {
dest.writeInt(0);
}
}

public static final Parcelable.Creator<ObjectB> CREATOR = new Creator<ObjectB>() {

@Override
public ObjectB createFromParcel(Parcel source) {
return new ObjectB(source);
}

@Override
public ObjectB[] newArray(int size) {
return new ObjectB[size];
}
};

@Override
public String toString() {
return "ObjectB [name=" + name + ", age=" + age + ", flag=" + flag
+ "]";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: