Externalizable vs Serializable

15/01/2012
  • Externalizable is an interface that enables you to define custom rules and your own mechanism for serialization. Serializable defines standard protocol and provides out of the box serialization capabilities.
  • Externalizable extends Serializable.
  • Implement writeExternal and readExternal methods of the Externalizable interface and create your own contract / protocol for serialization.
  • Saving the state of the supertypes is responsibility of the implementing class.
  • You might have seen in my previouse article on how to customize the default implementation of Serializable. These two methods readExternal and writeExternal (Externalizable) supersedes this customized implementation of readObject and writeObject.
  • In object de-serialization (reconsturction) the public no-argument constructor is used to reconstruct the object. In case of Serializable, instead of using constructor, the object is re-consturcted using data read from ObjectInputStream.
  • The above point subsequently mandates that the Externalizable object must have a public no-argument constructor. In the case of Seriablizable it is not mandatory.

  • Behaviour of writeReplace and readResolve methods are same for both Serializable and Externalizable objects. writeReplace allows to nominate a replacement object to be written to the stream. readResolve method allows to designate a replacement object for the object just read from the stream.
  • In most real time scenarios, you can use Serializable and write your own custom implementation for serialization by providing readObject and writeObject.

You may need Externalizable,

  1. If you are not happy with the way java writes/reads objects from stream.
  2. Special handling for supertypes on object construction during serialization.

nice explanation …. thank u

abhijit on January 16th, 2012 11:47 am

Every thing what you write is very help full.

Thank you so much.

Anonymous on January 16th, 2012 11:56 am

Every thing what you write is very help full.

Thank you so much.

Sirisha Gundala on January 16th, 2012 11:57 am

right to point explaination

DC on January 16th, 2012 12:33 pm

Thank you so much sir it is really helpful. :)

Anshul Jaiswal on January 16th, 2012 1:20 pm

You can also change default serialization behavior with Serializable interface by overriding writeObject and readObject methods.

Shamil on January 16th, 2012 3:30 pm

Superb Post…I like the way ur present the things with graphical images.

Dev Ghotkule on January 16th, 2012 4:14 pm

thanks again…love your posts that educate quickly, efficiently and to the point:)

Irina on January 17th, 2012 1:55 am

great post

utkal on January 17th, 2012 8:15 am

Kalakure Joe…

Suresh on January 18th, 2012 10:41 am

Hi Joe,
I am Jagdish, i have some question in Java.
Please give me ur email id so that i can contact
you….

Jagdish on January 18th, 2012 9:12 pm

Hi

I am Hari, i found exactly what i was looking for in this post, it would be great if you can provide some example here as well. Keep up the good work you. Thanks for sharing your knowledge.

Hari on January 19th, 2012 8:10 am

thank yu so muchhhh….

i have passed my interview with CTS…

main reason is your site and it helped me a lot, thanks..

Preethi on January 19th, 2012 3:04 pm

thank you

jose on February 3rd, 2012 11:34 am

its really helpful and knowledgeable.

Ruchika on February 3rd, 2012 12:52 pm


Email:

about
I am Joe, author of this blog. I run this with loads of passion. If you are into java, you may find lot of interesting things around ...more about me. Google+
java badge
Home