Java 中序列化和外部化的区别
序列化和外部化都是将对象转换为字节流并将字节流存储在数据库或内存中的过程。实现 java.io.Serializable 接口的类可以被序列化。另一方面,外部化用于根据应用程序需求进行自定义序列化。外部化扩展了 java.io.Serializable。
| 序号 | 关键 | 序列化 | 外部化 |
|---|---|---|---|
| 1 | 接口 | 序列化是一个标记接口 | 外部化包含两个方法 readExternal 和 writeExternal。 |
| 2 | 实现逻辑 | 实现该接口的类将序列化或持久化 Java 对象的责任交给 JVM。JVM 使用 readObject 和 writeObject 进行序列化 | 通过覆盖 readExternal 和 writeExternal 方法,外部化将实现逻辑控制权提供给应用程序。 |
| 3 | 忽略变量的方式 | 在序列化中,JVM 在 Java 对象的序列化和反序列化期间会忽略 transient 变量 | 程序员可以编写自己的逻辑,以在 Java 对象的外部化过程中忽略某些变量 |
| 4 | 性能 | 可序列化接口使用反射,导致性能相对较慢。 | Externalizable 提供对实现方法的完全控制。 |
| 5 | 具有继承关系的对象序列化 | 1. 如果超类不可序列化,则子类仍然可以被序列化。 2. 如果子类不可序列化,但超类自动可序列化 | 我们也可以将此应用于 Externalizable。 |
Externalizable 示例
class ExternalizableExample implements Externalizable {
Integer id;
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt( id );
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
this.id = in.readInt();
}
}Serializable 示例
class SerializableExample implements Serializable {
private static final long serialVersionUID = 5081877L;
String name;
}
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP