Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which is the best alternative for Java Serialization?

I'm currently working on a project which needs to persist any kind of object (of which implementation we don't have any control) so these objects could be recovered afterwards.

We can't implement an ORM because we can't restrict the users of our library at development time.

Our first alternative was to serialize it with the Java default serialization but we had a lot of trouble recovering the objects when the users started to pass different versions of the same object (attributes changed types, names, ...).

We have tried with the XMLEncoder class (transforms an object into a XML), but we have found that there is a lack of functionality (doesn't support Enums for example).

Finally, we also tried JAXB but this impose our users to annotate their classes.

Any good alternative?

like image 274
Alotor Avatar asked Oct 27 '08 07:10

Alotor


People also ask

What is serialization alternative in Java?

Google protocol buffers, popularly known as protobuf is an alternate and faster way to serialize Java objects. It's probably the best alternative to Java serialization and useful for both data storage and data transfer over the network.

Is Java serialization still used?

Usually used in Hibernate, JMS, JPA, and EJB, serialization in Java helps transport the code from one JVM to another and then de-serialize it there. Deserialization is the exact opposite process of serialization where the byte data type stream is converted back to an object in the memory.

Is there any other method to avoid serialization?

Explanation: writeObject() and readObject() methods should be implemented to avoid Java serialization.

Which method is used for serialization in Java?

The ObjectOutputStream class contains writeObject() method for serializing an Object. The ObjectInputStream class contains readObject() method for deserializing an object.


2 Answers

It's 2011, and in a commercial grade REST web services project we use the following serializers to offer clients a variety of media types:

  • XStream (for XML but not for JSON)
  • Jackson (for JSON)
  • Kryo (a fast, compact binary serialization format)
  • Smile (a binary format that comes with Jackson 1.6 and later).
  • Java Object Serialization.

We experimented with other serializers recently:

  • SimpleXML seems solid, runs at 2x the speed of XStream, but requires a bit too much configuration for our situation.
  • YamlBeans had a couple of bugs.
  • SnakeYAML had a minor bug relating to dates.

Jackson JSON, Kryo, and Jackson Smile were all significantly faster than good old Java Object Serialization, by about 3x to 4.5x. XStream is on the slow side. But these are all solid choices at this point. We'll keep monitoring the other three.

like image 80
Jim Ferrans Avatar answered Sep 29 '22 04:09

Jim Ferrans


http://x-stream.github.io/ is nice, please take a look at it! Very convenient

like image 44
krosenvold Avatar answered Sep 29 '22 04:09

krosenvold