序列化
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
将java对象从文件中恢复称为 反序列化 DeSerializetion。
参与序列化和反序列化的对象必须实现Serializeable接口。
Serializeable只是一个标志性接口,java虚拟机看到了类实现了这个接口。jvm会默认提供这个序列化版本号。
当你想序列化多个对象,可以将多个对象装载到一个集合(或其他容器)。集合元素以及集合都需要实现Serializeable接口。
如果希望一些属性不参加序列化(不将数据存储到磁盘)。可以添加Transient属性。
java比较序列化对象的主要从两个方面来区分:
- 类名
- 序列化版本号
当实现了Serialize接口以后,java会自动生成序列化版本号。但是自动生成序列化版本号存在有缺点。
也就是不能修改类代码,因为单例修改了类代码之前序列化的对象会被认为和这个类不同,因为尽管类名相同,但是由于修改了类代码,序列化版本号被重新提供了。所以凡是实现了Serializable接口的类建议自己指定序列号版本号。