美文网首页
序列化之serializable和parcelable的区别

序列化之serializable和parcelable的区别

作者: 阳光的nick_lxz | 来源:发表于2017-09-15 11:27 被阅读0次

    一.serializable

    用改方式实现序列化很简单,直接实现该接口就行了,其他的工作都被系统完成了。

    public class Student implements Serializable {
        private static  final long servialVersionUID=5432164564132123L;
        private int userId;
        private  String userName;
        public int getUserId() {
            return userId;
        }
    
        public void setUserId(int userId) {
            this.userId = userId;
        }
    
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
    }
    
    

    注意“”servialVersionUID 原则上序列化后的数据中的serialVersionUID只有和当前类的serialVersionUID相同才能够正常的被反序列化。如果不一致,说明当前类和序列化的类相比发生一些变化(变量,变量类型等等),则会报错。

    parcelable 方法

    采用该方法需要实现该接口并且手动实现序列化过程,相对复杂点。具体方式如下

    public class User implements Parcelable {
        String name;
        int age;
    
        protected User(Parcel in) {
            name = in.readString();
            age = in.readInt();
        }
        //该方法用来反序列化
        public static final Creator<User> CREATOR = new Creator<User>() {
            @Override
            public User createFromParcel(Parcel in) {
                return new User(in);
            }
    
            @Override
            public User[] newArray(int size) {
                return new User[size];
            }
        };
        /**
         * 内容描述  几乎都是0,只有当前对象存在文件描述符的时候返回1。
         */
        @Override
        public int describeContents() {
            return 0;
        }
    
        /**
         * 将对象写入序列化的结构中
         * @param dest  用来操作序列化的 Parcel类
         * @param flags   有两种值,为1是表嗾使当前对象需要作为返回值返回,不能立即释放资源,几乎都是0
         */
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeInt(age);
        }
    }
    

    两者区别

    serializable 是java的序列化接口。特点是简单,但是对于内存开销大,序列化和反序列化需要很多的I/O流操作。
    parcelable 是安卓的序列化方式,听名字就知道更适合,主要用于在内存序列化上,
    如果序列化到存储设备(文件等)或者网络传输,比较复杂,建议用serrialzable方式。

    参考:《安卓开发艺术探索》

    相关文章

      网友评论

          本文标题:序列化之serializable和parcelable的区别

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