在学习序列化的时候产生的问题,Serializable接口是一个空接口,那为什么实现Serializable接口就能序列化呢?
序列化主要是通过ObjectOutputSteam中的writeObject方法。在writeObject方法中会判断对象是否是Serializable,不是就报错。
所以Serializable接口更像一个标志,序列化的核心还是ObjectOutputStream里面的writeObject。
// ObjectOutputStream类
// writeObject(Object)->writeObject0(Object, boolean)中部分代码
if (obj instanceof String) {
writeString((String) obj, unshared);
} else if (cl.isArray()) {
writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
writeEnum((Enum<?>) obj, desc, unshared);
} else if (obj instanceof Serializable) { // 判断是否为Serializable对象
writeOrdinaryObject(obj, desc, unshared);
} else { // 不满足上述条件,抛出错误
if (extendedDebugInfo) {
throw new NotSerializableException(
cl.getName() + "\n" + debugInfoStack.toString());
} else {
throw new NotSerializableException(cl.getName());
}
}