序列化是什么?

312 阅读2分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战

序列化是什么?

序列化这个词语经常性的出现,那么它是什么意思呢?它的作用又是什么?本篇文章的目的就是为了弄清楚什么是序列化以及序列化的作用。

什么是序列化、反序列化

以java语言为例,java是面向对象的一门语言。 序列化就是把java对象转成流(二进制)的过程。相反的将流转化成对象过程被称作反序列化。转成流之后保存在磁盘或者内存。

序列化的作用

java中的对象是存在内存中,脱离内存将毫无意义,序列化的作用是为了进行传输,需要脱离内存之后还可以被其它进程识别。

因为计算机上所有的东西都是0和1组成。

在Android开发中,无法将对象直接传递给Activity或者Fragment,我们需要放到Intent或者Bundle中进行传递,通过Intent和Bundle传递对象时就需要先进行序列化。

总结来说是以下几个方面: 1. 永久性保存对象,保存对象的字节序列到本地文件中; 2. 通过序列化对象在网络中传递对象; 3. 通过序列化在进程间传递对象。

序列化怎么实现

在安卓中常用的序列化有方法,SerializableParcelable

* Serializable: java中自带的方法,直接实现Serializable的接口即可。

class Student implements Serializable {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

* Parcelable:android中的方法,实现Parcelable接口,实现内部的相应方法


public class Student implements Parcelable {
    private int id;
    private String name;

    protected Student(Parcel in) {
        id = in.readInt();
        name = in.readString();
    }

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

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeInt(id);
        out.writeString(name);
    }
}

Serializable与Parcelable区别

1. ParcelableSerializable性能高 2. 内存间数据传输时推荐使用Parcelable,保存或网络传输时推荐使用Serializable