Serializable和Parcelable

作者: 张先生_u | 来源:发表于2017-10-10 12:11 被阅读59次

Serializable

JDK提供序列化的标记接口,主要用于对象的持久化存储和网络传输。
通过反射序列化,过程中产生大量的临时变量,导致虚拟机频繁gc,性能消耗比较大。
静态方法属性类而不属于对象,不会被序列化
被关键字Transient修饰的成员变量不会被自动序列化
自定义类作为成员变量,如果未实现Serializable,它的成员变量不会被序列化。
创建Serializable对象比较简单:

public class Book implements Serializable{

    private static final long serialVersionUID = 1L;
    
    public String bookName;
    public String bookId;
    public float bookPrice; 
}

需要注意的是serialVersionUID,反序列化时,当前类的serialVersionUID必须和序列化时的serialVersionUID相同才能序列化,否则会出现异常。

序列化写文件:
Book book=new Book();
book.bookName="android开发";
book.bookId="1234";
book.bookPrice=78.9f;
ObjectOutputStream out = null;
try {
    FileOutputStream fileStream = new FileOutputStream("E:\\Book.zs");
    out=new ObjectOutputStream(fileStream);
    out.writeObject(book);
    out.flush();
} finally{
    if(out!=null){
        out.close();
  }
}
反序列化读文件:
ObjectInputStream input=null;
try {
      FileInputStream inputStream=new FileInputStream("E:\\Book.zs");
      input=new ObjectInputStream(inputStream);
      Book newBook=(Book)input.readObject();
      if(newBook!=null){
           System.out.println(newBook.bookName+" "+newBook.bookId+" "+newBook.bookPrice);
       }
     }finally{
         if(input!=null){
             input.close();
    }
}

Parcelable

android提供的序列化接口,主要用于组件内或进程间通信,在内存中序列化,性能高于Serializable。

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 
        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();
    }
}
关注我的公众号.jpg

相关文章

网友评论

    本文标题:Serializable和Parcelable

    本文链接:https://www.haomeiwen.com/subject/rvlvyxtx.html