Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 969
volni Avatar asked Sep 17 '10 14:09

volni


5 Answers

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();
}
like image 181
Thomas Mueller Avatar answered Oct 01 '22 13:10

Thomas Mueller


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

like image 42
G B Avatar answered Oct 01 '22 12:10

G B


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

like image 32
SANN3 Avatar answered Oct 01 '22 13:10

SANN3


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 - 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.

like image 39
Bozho Avatar answered Oct 01 '22 14:10

Bozho


You can use ObjectMapper

        ObjectMapper objectMapper = new ObjectMapper();
        ObjectClass object = objectMapper.readValue(data, ObjectClass.class);
like image 24
S. Du Avatar answered Oct 01 '22 12:10

S. Du