Java面试常遇到的问题(二)

Serializable与Parcelable的区别?

序列化:即把一个Java对象转换成字节序列存储至一个存储媒介的过程。

反序列化:把字节序列恢复成java对象的过程。

我们在进行Android开发的时候总会遇到对象在Activity和Fragment他们之间是不能直接传递,通常需要借助于Bundle和Intent传递对象。通过Android的API我们知道有两种选择传递对象,但是需要传递的对象需要Serializable或者Parceable序列化。实现Java对象序列化的方式如下:

  • 方式一:Serializable,要传递的类实现Serializable接口传递对象,
  • 方式二:Parcelable,要传递的类实现Parcelable接口传递对象。

他们两者之间的区别:

1)、Serializable的简单使用,简单的实现接口就ok,无需实现方法,Java便会对这个对象进行高效的序列化操作。但是它也有缺点这种方法使用啦反射,序列化过程中很慢,这种机制会在序列化的过程中创建很多临时对象,容易触发垃圾回收机制。

2)、Parcelable的使用如下:

public class Student implements Parcelable {
    private String name;
    private String gender;

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(this.name);
        dest.writeString(this.gender);
    }

    public Student() {
    }

    protected Student(Parcel in) {
        this.name = in.readString();
        this.gender = in.readString();
    }

    public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
        @Override
        public Student createFromParcel(Parcel source) {
            return new Student(source);
        }

        @Override
        public Student[] newArray(int size) {
            return new Student[size];
        }
    };
}
看着这种写法 是不是比第一种方法要复杂,其实也有一种比较简单的方法就是:如下让你一秒完成Parceable的序列化:

首先在androidstudio中使用Ctral+alt+s的快捷键到as的设置中。寻找Parcelable这个相关的插件使用,重启as即可。如下:重启as后,找到那个你要添加的对象使用alt+insert快捷键,选择Parcelable例如:

即可。很明显实现Parcelable并不容易。实现Parcelable接口需要写大量的模板代码,这使得对象代码变得难以阅读和维护。 Serializable 运行速度比较慢。你想偷点懒就用它吧,不过要记得serialization是一个比较耗资源的操作,尽量少使用。

如果你想要传递一个包含许多对象的列表,那么整个序列化的过程的时间开销可能会超过一秒,这会让屏幕转向的时候变得很卡顿。有已上Parcelable序列化的方法,可以让我们的读对象序列化效率更高,序列化速度更快,而且占用较少的资源。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值