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