Java 的序列化,从入门到反哺

67 阅读1分钟

Java 的序列化

参考:Java 序列化的原理

参考:Java 八股/01-Java基础/序列化和反序列化.md


回答

1. 序列化的定义
  • 定义:序列化是将对象转换为可传输格式的过程,是一种数据持久化手段。
2. Java 序列化机制
  • 可序列化的类型:在 Java 中,String、枚举或者实现了Serializable接口的类,均可以通过 Java 的序列化机制进行处理。

  • 序列化和反序列化过程

    通过序列化机制,可将类序列化为符合编码的数据流,

    然后通过InputStreamOutputStream将内存中的类持久化到硬盘或者网络中;

    通过反序列化机制,将磁盘中的字节码再转换成内存中的类。

3. 实现序列化的要求
  • 如果一个类想被序列化,需要实现Serializable接口,否则将抛出NotSerializableException异常。
  • Serializable接口是一个标记接口,没有方法或字段,仅用于标识可序列化的语义。
class MyClass implements Serializable {
    // 类的成员变量和方法
}
4. 自定义类的序列化执行路径
  1. #writeObject:序列化的起始方法。
  2. #writeObject0:判断类是否是自定义类。
  3. #writeOrdinaryObject:区分SerializableExternalizableExternalizable是另一种更灵活但需要手动实现更多逻辑的序列化方式 )。
  4. writeSerialData:序列化类中的字段(fields)。
  5. invokeWriteObject:通过反射调用类自己的序列化策略。在这个阶段,系统会处理自定义类的序列化方案。
5. 类型检查
  • 被序列化的类必须属于EnumArraySerializable类型其中的任何一种,以确保序列化操作的合法性和兼容性。