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