Serializable is a markup interface just like many other as SingleThreadModel, EventListener, Cloneable, RandomAccess, etc. These interfaces are just used to tag the class having certain special characterstic which is recognized by the JVM at runtime, for eg.:-
Only the classes implementing the Serializable have the capability to save their state. Here the marker Serializable on the class suggests the JVM at runtime that its state could be saved.
This is the reason these are also known as TAG intefaces. Java gives the facility to create empty interfaces.
Empty interface and marker interface are not necessarily synonyms. A marker interface is empty, but an empty interface can also have other purposes than just type checking, which is essentially what marker interfaces are for. Cloneable, Serializable, RandomAccess, SingleThreadModel - all just perfect examples.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com