Serializable 和 Parcelable 区别

android 中 自定义的对象序列化的问题有两个选择一个是Parcelable,另外一个是Serializable。

一 序列化原因:

1.永久性保存对象,保存对象的字节序列到本地文件中;
2.通过序列化对象在网络中传递对象;
3.通过序列化在进程间传递对象。 

二 至于选取哪种可参考下面的原则:

1.在使用内存的时候,Parcelable 类比Serializable性能高,所以推荐使用Parcelable类。
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC。
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。尽管Serializable效率低点, 也不提倡用,但在这种情况下,还是建议你用Serializable 。


实现:
1 Serializable 的实现,只需要继承  implements Serializable 即可。这只是给对象打了一个标记,系统会自动将其序列化。

2 Parcelabel 的实现,需要在类中添加一个静态成员变量 CREATOR,这个变量需要继承 Parcelable.Creator 接口。


public class Person implements Parcelable{
     
     // 成员变量
     private int id;
     private String name;
     
     // 必须实现Parcelable.Creator接口,用于获取Person数据,否则在获取Person数据的时候报错
     // 这个接口实现了从Percel容器读取Person数据,并返回Person对象给逻辑层使用
     // 实现Parcelable.Creator接口对象名必须为CREATOR,不如同样会报错上面所提到的错;
     // 在读取Parcel容器里的数据事,必须按成员变量声明的顺序读取数据,不然会出现获取数据出错
     // 反序列化对象
     public static final Parcelable.Creator<Person> CREATOR = new Creator(){
 
         @Override
         public Person createFromParcel(Parcel source) {
             // 必须按成员变量声明的顺序读取数据,不然会出现获取数据出错
             Person p = new Person();
             p.setId(source.readInt());
             p.setName(source.readString());
             return p;
         }
 
         @Override
         public Person[] newArray(int size) {
             return new Person[size];
         }
     };
     
     public int getId() {
         return id;
     }
 
     public void setId(int id) {
         this.id = id;
     }
 
     public String getName() {
         return name;
     }
 
     public void setName(String name) {
         this.name = name;
     }
 
     @Override
     public int describeContents() {
         return 0;
     }
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         // TODO Auto-generated method stub
         // 必须按成员变量声明的顺序封装数据,不然会出现获取数据出错
         // 序列化对象
         dest.writeInt(id);
         dest.writeString(name);
     }
 }


 

转载自:http://www.blogjava.net/lincode/archive/2011/09/16/358805.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值