要想可序列化需要满足如下要求:
1.需要实现接口:Serializable
2.当前类提供一个全局常量:private static final long serialVersionUID
3.除了当前类需要实现Serializable接口外,还必须保证其内部所有属性也必须是可序列化的,(默认情况下基本数据类型可序列化)
4.ObjectOutputStream和ObjectInputStream不能序列化static和transient修 饰的成员变量
如果类没有显示定义这个静态常量,它的值是Java运行时环境根据类的内部细节自 动生成的。若类的实例变量做了修改,serialVersionUID 可能发生变化。故建议, 显式声明。
简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验 证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的 serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同 就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)