zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Java】序列化与反序列化

JAVA 序列化
2023-06-13 09:15:37 时间

1. 对象的序列化机制是什么?

对象序列化机制允许把内存中的Java对象转化成语平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。

当其他程序获取了这种二进制流,就可以恢复成原来的Java对象。

2. Java自定义类序列化要求:

  1. 自定义类需要实现接口:Serializable(标识接口:无任何属性或抽象方法),否则会报NotSerializableException 异常
  2. 要求自定义类声明一个全局常量:static long serialVersionUID = 42234234L;
    • 该常量必须是:static long 类型的,对权限修饰符没有要求
    • 该常量用于唯一标识该类,所以每个类的常量值都一样保持不一致
  3. 要求自定义类的各个属性也必须是可以序列化的:
    • 对于基本数据类型:默认就可以序列化,因为底层已经实现类了Serializable接口
    • 若某个属性是引用数据类型:那么这个属性所在类也要求实现Serializable接口

3. 注意点:

  1. 如果没有声明全局常量serialVersionUID,系统也会自动声明一个针对于当前类的serialVersionUID。 但是,当此类发生任何修改,都会导致serialVersionUID被修改,进而导致反序列化时,出现InvalidClassException异常。
  2. 若某个属性不想被序列化,则该属性必须注明是瞬态的,使用transient关键字修饰。
  3. 静态(static)变量的值不会序列化。因为静态变量的值不属于某个对象 是属于类的。