Java: object to byte[] and byte[] to object converter (for Tokyo Cabinet)

JavaSerializationByteBytearrayTokyo Cabinet

Java Problem Overview


I need to convert objects to a byte[] to be stored in the Tokyo Cabinet key-value store. I also need to unbyte the byte[] to an Object when reading from the key-value store.

Are there any packages out there that will help me with this task? Or would the best solution to implement it myself?

Java Solutions


Solution 1 - Java

public static byte[] serialize(Object obj) throws IOException {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ObjectOutputStream os = new ObjectOutputStream(out);
    os.writeObject(obj);
    return out.toByteArray();
}
public static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
    ByteArrayInputStream in = new ByteArrayInputStream(data);
    ObjectInputStream is = new ObjectInputStream(in);
    return is.readObject();
}

Solution 2 - Java

If your class extends Serializable, you can write and read objects through a ByteArrayOutputStream, that's what I usually do.

Solution 3 - Java

Use serialize and deserialize methods in SerializationUtils from commons-lang.

Solution 4 - Java

You can look at how Hector does this for Cassandra, where the goal is the same - convert everything to and from byte[] in order to store/retrieve from a NoSQL database - https://github.com/hector-client/hector/tree/master/core/src/main/java/me/prettyprint/cassandra/serializers">see here. For the primitive types (+String), there are special Serializers, otherwise there is the generic ObjectSerializer (expecting Serializable, and using ObjectOutputStream). You can, of course, use only it for everything, but there might be redundant meta-data in the serialized form.

I guess you can copy the entire package and make use of it.

Solution 5 - Java

You can use ObjectMapper

        ObjectMapper objectMapper = new ObjectMapper();
        ObjectClass object = objectMapper.readValue(data, ObjectClass.class);

Solution 6 - Java

If you do not want to serialize you can use object mapper

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());

ByteArrayOutputStream out = new ByteArrayOutputStream();
objectMapper.writeValue(out,obj);
byte[] data = out.toByteArray();

https://stackoverflow.com/questions/4548816/when-should-we-implement-serializable-interface/53889695#53889695

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvolniView Question on Stackoverflow
Solution 1 - JavaThomas MuellerView Answer on Stackoverflow
Solution 2 - JavaG BView Answer on Stackoverflow
Solution 3 - JavaSANN3View Answer on Stackoverflow
Solution 4 - JavaBozhoView Answer on Stackoverflow
Solution 5 - JavaS. DuView Answer on Stackoverflow
Solution 6 - JavachunkyView Answer on Stackoverflow