How can I serialize an object that does not implement Serializable? I cannot mark it Serializable because the class is from a 3rd party library.
If the class is not final, you can make your own class that extends it and implements Serializable. There are lots of other ways to serialize besides Java's built-in mechanism though.
If your class already implements the Serializable interface (required for serializing), all you must do is to declare the field you don't want to serialize with transient:
public transient String description;
You can't serialise a class that doesn't implement Serializable
, but you can wrap it in a class that does. To do this, you should implement readObject
and writeObject
on your wrapper class so you can serialise its objects in a custom way.
transient
.writeObject
, first call defaultWriteObject
on the stream to store all the non-transient fields, then call other methods to serialise the individual properties of your non-serialisable object.readObject
, first call defaultReadObject
on the stream to read back all the non-transient fields, then call other methods (corresponding to the ones you added to writeObject
) to deserialise your non-serialisable object.I hope this makes sense. :-)
You can use Kryo. It works on non serialized classes but classes needs registered aforehand.
Wrap the non-serializable class in a class of your own that implements Serializable
. In your class's writeObject
method, do whatever's necessary to serialize sufficient information on the non-serializable object so that your class's readObject
method can reconstruct it.
Alternatively, contact the developer of the non-serializable class and tell him to fix it. :-)