序列化和外部化都是将对象转换为流字节并将字节流存储在数据库或内存中的过程。实现java.io.Serializable接口的类可以序列化。另一方面,根据应用程序的要求,外部化用于自定义序列化。外部化扩展了java.io.Serializable。
序号 | 键 | 序列化 | 外在化 |
---|---|---|---|
1 | 接口 | 序列化是标记接口 | 外部化包含两个方法readExternal和writeExternal。 |
2 | 实施逻辑 | 实现此接口的类将JVM的责任交给Java进行序列化或持久化。JVM使用readObject和writeObject进行序列化 | 外部化通过重写readExternal和writeExternal方法为应用程序提供实现逻辑控制。 |
3 | 忽略变量的方法 | 在序列化中,JVM会在Java对象的序列化和反序列化过程中忽略瞬态变量 | 程序员可以编写自己的逻辑来忽略Java对象外部化过程中的某些变量 |
4 | 性能 | 在可序列化接口中,使用反射会导致性能降低。 | 外部化可完全控制实施方法。 |
5 | 具有继承的对象序列化 | 1.如果超类不可序列化,则子类仍然可以序列化。 2.如果子类未序列化但超类可自动序列化 | 我们也可以将其应用于可外部化。 |
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(); } }
class SerializableExample implements Serializable { private static final long serialVersionUID = 5081877L; String name; }