In Java, a class that is Externalizable has more control over how it is serialized. The serialization mechanism normally determines its own format when it serializes an object, but an object that is Externalizable defines a custom format by manually manipulating the output.
Now, let's make BookExternalizable:
We now have much more control over what data we write and how we write it. The downside is that our members can no longer be final, and we needed to add a no-arg public constructor.