序列化,刚入门的开发者可能从字面上看不出这个到底是啥意思,这比较妨碍我们的理解。所以我们需要铭记其定义和作用。
定义:
- Java序列化就是指把Java对象转换为字节序列的过程
- Java反序列化就是指把字节序列恢复为Java对象的过程。
作用:
- 对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。
- 通过序列化可以在进程间传递对象。
从序列化的作用中我们可以看到字节流有利于网络传输或者存储文件,或者进行进程间通信传递对象。实际上,进程间传递对象,也可以理解为序列化的对象保存在了系统的内存中,然后传给另一个对象。由于不同的进程,拥有不同的jvm,所以才需要进行进程间通信,然而,序列化后的对象由于其可用存储为文件或者存在内存,所以可用与进程间通信。
图1 序列化和反序列化过程
Android中总共有两种序列化方式,一个是Java提供的序列化接口Serializable,一个是Android提供的新的序列化方式Parcelable。
Serializable
首先,Java提供的Serialization接口是个空接口,如果一个对象需要序列化,可以实现Serialization接口,然后声明一个SerialVersionUID。
package java.io;
public interface Serializable {
}
因为是空接口,所以非常简单,看起来什么都不用做,实际上是系统帮助我们做了序列化的工作,相当于我这个对象标记为Serialization,系统JVM就知道这个类需要序列化。
public class Person implements Serializable {
private static final long serialVersionUID = 1234567L;
private int age;
private String name;
private boolean isMale;
然后,序列化和反序列化的代码为
//序列化
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));
os.writeObject(person);
os.close()