Android 数据序列化实现方法

 

数据序列化的作用

    可实现进程间通信,本地数据存储,网络数据传输等都需要实现序列化,但是由于应用场景不同,序列化的方式也不同,因为要考虑效率和使用难易的问题。序列化的目的其实简单来说就是想实现数据的传输。


序列化与反序列化

    序列化:将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

    反序列化:即序列化的反向操作,将磁盘中的数据转化成对象,方便以后使用。

 

Serializable

一、Serializable简介

    Serializable是一个可传递的容器,是使用最广泛也是最简单的一种,只需要实现其接口即可实现数据序列化,但是Serializable也有缺点,它使用到反射机制,在序列化的创建过程中会创建很多临时对象,容易触发垃圾回收,序列化过程慢,如果对效率要求严格则不建议使用。Serializable是JDK提供的接口,这种序列化方式是基于磁盘或网络的。

 

二、使用方法

public class SerializableDemo implements Serializable{
    public int age;
    public String name;
    public String sex;
}

 

Parcelable


一、简介

    Parcel就是一个存放读取数据的容器, android系统中的binder进程间通信(IPC)就使用了Parcel类来进行客户端与服务端数据的交互,而且AIDL的数据也是通过Parcel来交互的。在Java空间和C++都实现了Parcel,由于它在C/C++中,直接使用了内存来读取数据,因此,它更有效率。Parcelable是Android的SDK提供的接口,它是基于内存的,由于内存读写速度高于磁盘,因此Android跨进程对象的传递一般使用Parcelable。

 

二、使用方法

    Parcelable的使用较为复杂,因为需要重写很多方法,但是Android Studio提供了一个插件Android Parcelable code generator,它可以帮我们自动实现Parcelable需要重写的方法。

Android Parcelable code generator 安装方法

 

使用Android Parcelable code generator实现Parcelable序列化

(1)编写需要序列化的类

public class ParcelableDemo{
    public int age;
    public String name;
    public String sex;
}

(2)使用Android Parcelable code generator工具

 

(3)自动生成的代码

public class ParcelableDemo implements Parcelable {
    public int age;
    public String name;
    public String sex;

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

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

    public ParcelableDemo() {
    }

    protected ParcelableDemo(Parcel in) {
        this.age = in.readInt();
        this.name = in.readString();
        this.sex = in.readString();
    }

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

        @Override
        public ParcelableDemo[] newArray(int size) {
            return new ParcelableDemo[size];
        }
    };
}

 

实现Parcelable需要实现的方法:

  • describeContents:接口内容的描述,一般返回0即可
  • writeToParcel:序列化的方法,将类的数据写入到Parcel容器中
  • 静态的Parcelable.Creator接口,这个接口包含两个方法:(1)createFromParcel:反序列化的方法,将Parcel还原为java对象。(2)newArray:提供给外部类反序列化这个数组使用。

 

JSON

    JSON全称JavaScript Object Notation,它是一种轻量级的数据交换格式,Android SDK原生支持JSON格式的解析和序列化,JSON可以说是移动端使用最广泛的数据交换格式。对于JSON的解析,google还推出了自己的开源库Gson可以很快的实现JSON的解析。

 

写在末尾

    序列化的方式远不止这么多,但是这三种方式是目前Android实现序列化应用最广泛的方法,它们各有各的优点,Serializable使用简便,Parcelable效率高,JSON应用广泛。虽然Parcelable的效率高于Serializable,但是Parcelable不能使数据长期保存于磁盘中,所以在某种情况下我们依然会使用Serializable来实现序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值