1. 对象的序列化机制是什么?
对象序列化机制允许把内存中的Java对象转化成语平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。
当其他程序获取了这种二进制流,就可以恢复成原来的Java对象。
2. Java自定义类序列化要求:
- 自定义类需要实现接口:Serializable(标识接口:无任何属性或抽象方法),否则会报
NotSerializableException
异常 - 要求自定义类声明一个全局常量:static long serialVersionUID = 42234234L;
- 该常量必须是:static long 类型的,对权限修饰符没有要求
- 该常量用于唯一标识该类,所以每个类的常量值都一样保持不一致
- 要求自定义类的各个属性也必须是可以序列化的:
- 对于基本数据类型:默认就可以序列化,因为底层已经实现类了Serializable接口
- 若某个属性是引用数据类型:那么这个属性所在类也要求实现Serializable接口
3. 注意点:
- 如果没有声明全局常量serialVersionUID,系统也会自动声明一个针对于当前类的serialVersionUID。
但是,当此类发生任何修改,都会导致serialVersionUID被修改,进而导致反序列化时,出现
InvalidClassException
异常。 - 若某个属性不想被序列化,则该属性必须注明是瞬态的,使用
transient
关键字修饰。 - 静态(
static
)变量的值不会序列化。因为静态变量的值不属于某个对象 是属于类的。