前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓中Serializable 比 Parcelable好在哪?

安卓中Serializable 比 Parcelable好在哪?

原创
作者头像
没关系再继续努力
修改2021-11-12 09:20:32
4620
修改2021-11-12 09:20:32
举报
文章被收录于专栏:Android面试

一、序列化的目的:


(1)永久的保存对象,将对象数据保存在文件、磁盘或者数据库中 。

(2)通过序列化操作将对象数据在网络上进行传输 。

(3)将对象序列化之后在进程间进行传输。

(3)在安卓中使用 Intent 进行传输时候,数据类型较为复杂的需要进行序列化操作 。

二、两者区别:


(1). 在使用内存的时候,Parcelable 类比 Serializable 性能高,所以推荐使用 Parcelable 类。

(2). Serializable 在序列化的时候会产生大量的临时变量,从而引起频繁的 GC。

(3). arcelable 不能使用在要将数据存储在磁盘上的情况。尽管 Serializable 效率低点,但在这种情况下,还是建 议你用 Serializable.

(4). Serializable的实现,只需要实现Serializable接口即可。这只是给对象打了一个标记(UID),系统会自动将其序列化。而Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口,并实现读写的抽象方法。

**Serializable 用法**

public class User implements Serializable {

代码语言:txt
复制
private String name;

private String age;



public User(String name, String age) {

    this.name = name;

    this.age = age;

}



public String getName() {

    return name;

}



public void setName(String name) {

    this.name = name;

}



public String getAge() {

    return age;

}



public void setAge(String age) {

    this.age = age;

}



@Override

public String toString() {

    return "User{" +

            "name='" + name + '\'' +

            ", age='" + age + '\'' +

            '}';

}

}

通过上述代码中,可知Serializable序列化 之需要实现Serializable接口即可,使用比较简单;

**Parcelable 用法**

public class User implements Parcelable {

代码语言:txt
复制
public int id;



public String age;



public String name;



@Override

public int describeContents() {

    return 0;

}



@Override

public void writeToParcel(Parcel dest, int flags) {

    dest.writeInt(this.id);

    dest.writeString(this.age);

    dest.writeString(this.name);

}



public User() {

}



protected User(Parcel in) {

    this.id = in.readInt();

    this.age = in.readInt();

    this.name = in.readString();

}



public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {

    @Override

    public User createFromParcel(Parcel source) {

        return new User(source);

    }



    @Override

    public User[] newArray(int size) {

        return new User[size];

    }

};

}

通过代码可看Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator 接口,并实现读写的抽象方法。

相关视频推荐:

【安卓面试必看】Serializable原理以及面试点详解

加粗

本文转自 https://juejin.cn/post/6844903864756338701,如有侵权,请联系删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档