Android中Serializable和Parcelable序列化对象详解

2019-12-10 19:00:46于海丽

2).Implements Parcelable 接口(不仅仅需要声明,还需要实现内部的相应方法)
Parcelable的简单实例:

注:写入数据的顺序和读出数据的顺序必须是相同的.

public class Book implements Parcelable{
 private String bookName;
 private String author;
 private int publishDate;
 
 public Book(){
  
 }
 
 public String getBookName(){
  return bookName;
 }
 
 public void setBookName(String bookName){
  this.bookName = bookName;
 }
 
 public String getAuthor(){
  return author;
 }
 
 public void setAuthor(String author){
  this.author = author;
 }
 
 public int getPublishDate(){
  return publishDate;
 }
 
 public void setPublishDate(int publishDate){
  this.publishDate = publishDate;
 }
 
 @Override
 public int describeContents(){
  return 0;
 }
 
 @Override
 public void writeToParcel(Parcel out, int flags){
  out.writeString(bookName);
  out.writeString(author);
  out.writeInt(publishDate);
 }
 
 public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>(){
  
     @Override
  public Book[] newArray(int size){
   return new Book[size];
  }
  
  @Override
  public Book createFromParcel(Parcel in){
   return new Book(in);
  }
 };
 
 public Book(Parcel in){
  //如果元素数据是list类型的时候需要: lits = new ArrayList<?> in.readList(list); 否则会出现空指针异常.并且读出和写入的数据类型必须相同.如果不想对部分关键字进行序列化,可以使用transient关键字来修饰以及static修饰.
  bookName = in.readString();
  author = in.readString();
  publishDate = in.readInt();
 }
}

  我们知道在Java应用程序当中对类进行序列化操作只需要实现Serializable接口就可以,由系统来完成序列化和反序列化操作,但是在Android中序列化操作有另外一种方式来完成,那就是实现Parcelable接口.也是Android中特有的接口来实现类的序列化操作.原因是Parcelable的性能要强于Serializable.因此在绝大多数的情况下,Android还是推荐使用Parcelable来完成对类的序列化操作的.

3.Parcelable与Serializable的性能比较

首先Parcelable的性能要强于Serializable的原因我需要简单的阐述一下

  1). 在内存的使用中,前者在性能方面要强于后者

  2). 后者在序列化操作的时候会产生大量的临时变量,(原因是使用了反射机制)从而导致GC的频繁调用,因此在性能上会稍微逊色