一.为什么要用到序列化
进行android开发的时候,无法将对象的引用传给activitys和fragments,需要将这些对象放在一个Intent或者Bundle里面,然后在传传递
二.什么是序列化
表示将一个对象转换成可存储或者可传输的状态。序列化后的对象可以在网络上传输,也可以村粗到本地
三.怎么序列化
android中Intent传递类对象有两种方式实现
1.Serializable (java自带)
Serializable是序列化的意思,表示将一个对象转换成可存储或者可传输的状态。序列化后可以传输或者存储
使用方法如下:
public class Person implements Serializable {
String name="";
private String number="";
private String address="";
private static final long serialVersionUID = 46543445;
public void setName(String name)
{
this.name = name;
}
public void setNumber(String number)
{
this.number = number;
}
public void setAddress(String address)
{
this.address = address;
}
public String getName()
{
return name;
}
public String getNumber()
{
return number;
}
public String getAddress()
{
return address;
}
}
2.Parecelable (android专用)
Parecelab方式的实现原理是将一个完整的对象进行分解,而分解好后的每一部分都是Intent所支持的数据类型,这样就可以传递了
使用方法如下:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
四.Serializable和Parecelable的区别
1.Parecelable比Serializable性能高
2.Serializable在序列化的时候回产生大量的临时变量,从而引起频繁的GC
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点,但此时还是建议使用Serializable 。
网友评论