zoukankan      html  css  js  c++  java
  • Android:Paracale和Serialize的区别

    使用场景

    1. 持久化保存
    2. 进程间通信
    3. 网络传输对象

    使用方式

    Serialize

    只需要继承Serializable这个接口,Serializable是个空接口,用于标记这是个可序列化的对象。serialVersionUID用于标记序列化和反序列化对象的版本号,不写的话编译时会自动给一个。

    public class Person implements Serializable {
        private static final long serialVersionUID = -7060210544600464482L;
        private String name;
        private int age;
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name = name;
        }
        public int getAge(){
            return age;
        }
        public void setAge(int age){
            this.age = age;
        }
    }

    Serializable对象的具体处理在ObjectOutputStream的writeObject方法中

    Paracale

    Parcelabl用起来比较麻烦,需要自己重写序列化方法writeToParcel方法和反序列化CREATOR对象

    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();
        }
    }

    工作原理

    1. Paracale在JAVA层和C层都实现了Paracale方法,最终都是在C层用malloc分配内存,适合IPC等内存间高速通信的场景,不适用于把对象保存在硬盘上
    2. Serializable实现简单不需要额外的代码,但是会产生很多中间变量,频繁触发GC
  • 相关阅读:
    Privacy Policy
    MINE
    IOS的浅拷贝和深拷贝
    Mine
    IOS8Preview-xCode_6
    IOS8Preview-Huge for developer and Massive for everyone else
    java-Filter
    Java-servlet
    Java-基本的程序设计结构
    银行应用系统安全性设计(3):密钥及其管理
  • 原文地址:https://www.cnblogs.com/billshen/p/13363344.html
Copyright © 2011-2022 走看看