Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why its required to mark a class as serializable?

If a similar question is already posted on stackoverflow, pls just post the link.

What is the need to implement Serializable interface (with no methods) for objects which are to be serialized ? The Java API says - - If its not implemented then it will throw java.io.NotSerializableException.

That's because of the following code in ObjectOutputStream.java

............................

writeObject0(Object obj, boolean unshared){
.............
 } else if (cl.isArray()) {
        writeArray(obj, desc, unshared);
        } else if (obj instanceof Serializable) {
        writeOrdinaryObject(obj, desc, unshared);
        } else {
        throw new NotSerializableException(cl.getName());
        }
................

But my question is why its necessary to implement Serializable and thereby inform or tell Java/JVM that a class can be serialized. (Is it only to avoid the exception ?).

In this is the case, If we write a similar functionality which writes objects to streams without the check of whether the class in an instanceOf Serializable, Will the objects of a class not implemneting Serializable serialized ?

Any help is appreciated.

like image 432
akjain Avatar asked May 18 '09 14:05

akjain


1 Answers

It's a good question. The Serializable is know as a marker interface, and can be viewed as a tag on a class to identify it as having capabilities or behaviours. e.g. you can use this to identify classes that you want to serialise that don't have serialVersionUid defined (and this may be an error).

Note that the commonly used serialisation library XStream (and others) don't require Serializable to be defined.

like image 148
Brian Agnew Avatar answered Sep 21 '22 18:09

Brian Agnew