「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」
序列化是什么?
序列化这个词语经常性的出现,那么它是什么意思呢?它的作用又是什么?本篇文章的目的就是为了弄清楚什么是序列化以及序列化的作用。
什么是序列化、反序列化
以java语言为例,java是面向对象的一门语言。 序列化就是把java对象转成流(二进制)的过程。相反的将流转化成对象过程被称作反序列化。转成流之后保存在磁盘或者内存。
序列化的作用
java中的对象是存在内存中,脱离内存将毫无意义,序列化的作用是为了进行传输,需要脱离内存之后还可以被其它进程识别。
因为计算机上所有的东西都是0和1组成。
在Android开发中,无法将对象直接传递给Activity或者Fragment,我们需要放到Intent或者Bundle中进行传递,通过Intent和Bundle传递对象时就需要先进行序列化。
总结来说是以下几个方面: 1. 永久性保存对象,保存对象的字节序列到本地文件中; 2. 通过序列化对象在网络中传递对象; 3. 通过序列化在进程间传递对象。
序列化怎么实现
在安卓中常用的序列化有方法,Serializable和Parcelable
* 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. Parcelable比Serializable性能高
2. 内存间数据传输时推荐使用Parcelable,保存或网络传输时推荐使用Serializable