Java 的序列化
参考:Java 序列化的原理
参考:Java 八股/01-Java基础/序列化和反序列化.md
回答
1. 序列化的定义
- 定义:序列化是将对象转换为可传输格式的过程,是一种数据持久化手段。
2. Java 序列化机制
-
可序列化的类型:在 Java 中,
String、枚举或者实现了Serializable接口的类,均可以通过 Java 的序列化机制进行处理。 -
序列化和反序列化过程:
通过序列化机制,可将类序列化为符合编码的数据流,
然后通过
InputStream和OutputStream将内存中的类持久化到硬盘或者网络中;通过反序列化机制,将磁盘中的字节码再转换成内存中的类。
3. 实现序列化的要求
- 如果一个类想被序列化,需要实现
Serializable接口,否则将抛出NotSerializableException异常。 Serializable接口是一个标记接口,没有方法或字段,仅用于标识可序列化的语义。
class MyClass implements Serializable {
// 类的成员变量和方法
}
4. 自定义类的序列化执行路径
#writeObject:序列化的起始方法。#writeObject0:判断类是否是自定义类。#writeOrdinaryObject:区分Serializable和Externalizable(Externalizable是另一种更灵活但需要手动实现更多逻辑的序列化方式 )。writeSerialData:序列化类中的字段(fields)。invokeWriteObject:通过反射调用类自己的序列化策略。在这个阶段,系统会处理自定义类的序列化方案。
5. 类型检查
- 被序列化的类必须属于
Enum、Array和Serializable类型其中的任何一种,以确保序列化操作的合法性和兼容性。