Java.Core.Explain the difference between Serializable and Externalizable.

Awesome question! Let’s break down the difference between Serializable and Externalizable, because they both deal with serialization — but they work very differently.


🔗 1️⃣ Serializable — Automatic Serialization

What is it?

Serializable is a marker interface — meaning it has no methods. When you implement Serializable, Java’s default serialization mechanism automatically handles writing and reading your object’s fields (except transient and static).

public class Person implements Serializable {
    private String name;
    private int age;
}

⚙️ How it works

  • Java uses reflection to inspect all fields and write them to a stream.
  • During deserialization, it reads all fields back.
  • You can customize behavior slightly by defining:
    • private void writeObject(ObjectOutputStream oos)
    • private void readObject(ObjectInputStream ois)

✅ Pros

✔️ Simple to use — just implement the interface.
✔️ Works automatically for most objects.


❌ Cons

❌ Slower — relies heavily on reflection.
❌ Writes all fields, even ones you may not need.
❌ Versioning issues (requires careful serialVersionUID management).
❌ Security risks (deserialization attacks).


🔗 2️⃣ Externalizable — Manual Serialization

What is it?

Externalizable is a more advanced interface that requires you to manually define how your object gets serialized and deserialized. It gives you full control over the process.

public class Person implements Externalizable {
    private String name;
    private int age;

    public Person() {
        // Mandatory no-arg constructor for Externalizable
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeUTF(name);
        out.writeInt(age);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        name = in.readUTF();
        age = in.readInt();
    }
}

⚙️ How it works

  • You have to explicitly write each field to the stream in writeExternal.
  • You have to explicitly read each field in readExternal.

✅ Pros

✔️ Full control over what gets serialized (you can skip fields, transform data, compress data, etc.).
✔️ More efficient — you can write only the essential fields.
✔️ No need to rely on reflection (faster than Serializable).


❌ Cons

❌ More work for the developer.
❌ If you forget a field, that data will be lost.
❌ Still relies on serialVersionUID for compatibility.


🆚 Quick Comparison Table

AspectSerializableExternalizable
Interface typeMarker interfaceRegular interface with methods
Methods to implementNone (unless you override writeObject/readObject)Must implement writeExternal() and readExternal()
FlexibilityLow — automatic processHigh — full manual control
Reflection usageYes (slow)No (faster)
Versioning controlNeeds serialVersionUIDNeeds serialVersionUID
Ease of useVery easyMore complex
Field selectionSerializes all non-transient fieldsYou choose exactly what to write/read
PerformanceSlower (due to reflection and full field write)Can be faster (optimized by you)

✅ When to use what?

SituationRecommended
Simple object with all fields needing serializationSerializable (easy & quick)
Performance-critical or large objectExternalizable (optimized storage)
Object with sensitive fields or derived fieldsExternalizable (skip or transform fields manually)
Complex versioning requirementsEither works, but Externalizable gives you more control

🧵 Analogy

  • Serializable = Automatic car. Easy, but you don’t control the gears directly.
  • Externalizable = Manual car. More work, but you get complete control over how things run.

🚀 Final tip

In modern systems, many developers avoid both and switch to:

  • JSON (Jackson, Gson)
  • Protobuf (Google Protocol Buffers)
  • Avro (great for evolving schemas)

These are faster, safer, and more portable than Java’s built-in serialization (since Serializable and Externalizable are Java-only).

This entry was posted in Без рубрики. Bookmark the permalink.