当前位置:嗨网首页>书籍在线阅读

08-对象序列化

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

10.1.7 对象序列化

所谓序列化,就是将对象的状态信息转换为便于存储和传输的过程。在序列化期间,对象将其当前状态写入临时或持久性存储区,当需要重新创建该对象时,可以从存储区中读取或反序列化该对象。

在Java中,序列化是指将Java对象保存为二进制字节码的过程,Java反序列化则是指将二进制码重新转换成Java对象的逆向过程。在具体实现上,只需要实现Serializable接口即可。

对于Android平台来说,序列化对象主要有Serializable和Parcelable两种方式。Serializable实际上是使用Java的反射机制来实现对象的序列化和反序列化操作的,因为反射会产生大量的临时变量,进而产生过高的内存负载,所以性能远低于Parcelable方式。

采用Parcelable方式实现序列化,需要重写wirteToParcel方法来序列化对象,而且需要创建以Parcel为参数的构造函数来使对象反序列化。代码如下。

class UserBean : Parcelable {
    private var name: String="jack"
    private var age: Int=30
    override fun describeContents(): Int {
        return 0
    }
    override fun writeToParcel(dest: Parcel, flags: Int) {
        dest.writeString(this.name)
        dest.writeInt(this.age)
    }
    constructor() {}
    protected constructor(`in`: Parcel) {
        this.name = `in`.readString()
        this.age = `in`.readInt()
    }
    companion object {
        val CREATOR: Parcelable.Creator<UserBean> = object : Parcelable.Creator<UserBean> {
            override fun createFromParcel(source: Parcel): UserBean {
                return UserBean(source)
            }
            override fun newArray(size: Int): Array<UserBean?> {
                return arrayOfNulls(size)
            }
        }
    }
}

Kotlin在1.1.4版本中新增了对Parcelable的支持,添加注解@Parcelize就可以自动生成相应的Parcelable代码。代码如下。

import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class UserBean(val name: String, val age: Int) : Parcelable