Serializable vs Parcelable

本文对比了Java中的Serializable和Parcelable接口,探讨了它们在序列化和反序列化过程中的优缺点。Serializable简单易用,但效率较低;Parcelable则需手动实现,但效率更高,适合频繁的数据交换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Serializable
优点:

  1. 只需要实现Serializable接口,用起来简单,不需要多余的代码
  2. 能够将内容序列化到磁盘中

缺点:

  1. 效率低,占用内存多

使用中的关键点:

  1. 要主动给出一个serialVersionUID。序列化操作的时候系统会把当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会去检测文件中的serialVersionUID,判断它是否与当前类的serialVersionUID一致,如果一致就说明序列化类的版本与当前类版本是一样的,可以反序列化成功。指定serialVersionUID,这样的话即使微小的变化也不会导致crash的出现。

  2. 关键字transient可以排除不需要序列化的字段

    • 序列化时,首先系统会先调用writeReplace方法,在这个阶段,可以进行自己操作,将需要进行序列化的对象换成我们指定的对象.一般很少重写该方法
    private Object writeReplace() throws ObjectStreamException {
            System.out.println("writeReplace invoked");
            return this;
    }
    
    • 接着系统将调用writeObject方,来将对象中的属性一个个进行序列,我们可以在这个方法中控制住哪些属性需要序列化.
    private void writeObject(java.io.ObjectOutputStream out) throws IOException {
        System.out.println("writeObject invoked");
        out.writeObject(this.name == null ? "zejian" : this.name);
    }
    
    • 反序列化时,系统会调用readObject方法,将我们刚刚在writeObject方法序列化好的属性,反序列化回来.然后通过readResolve方法,我们也可以指定系统返回给我们特定的对象可以不是writeReplace序列化时的对象,可以指定其他对象.
        private void readObject(java.io.ObjectInputStream in) throws IOException,
                ClassNotFoundException {
            System.out.println("readObject invoked");
            this.name = (String) in.readObject();
            System.out.println("got name:" + name);
        }
    
    • 通过readResolve方法,我们也可以指定系统返回给我们特定的对象 可以不是writeReplace序列化时的对象,可以指定其他对象.一般很少重写该方法
        private Object readResolve() throws ObjectStreamException {
            System.out.println("readResolve invoked");
            return this;
        }
    

Parcelable
优点:

  1. 内存占用少,传输效率高

缺点:

  1. 需要编写额外的代码

转载于:https://my.oschina.net/simaben/blog/1821417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值