web-dev-qa-db-fra.com

Java: objet à octet [] et octet [] au convertisseur d'objet (pour Tokyo Cabinet)

J'ai besoin de convertir des objets en octet [] pour pouvoir les stocker dans le magasin clé-valeur du Cabinet Tokyo. J'ai également besoin de décomposer l'octet [] en un objet lors de la lecture du magasin de valeurs-clés.

Existe-t-il des packages pouvant m'aider dans cette tâche? Ou serait la meilleure solution pour le mettre en œuvre moi-même?

59
volni
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();
}
150
Thomas Mueller

Si votre classe s'étend Serializable, vous pouvez écrire et lire des objets via un ByteArrayOutputStream, c'est ce que je fais habituellement.

11
G B

Utilisez les méthodes serialize et deserialize dans SerializationUtils de commons-lang .

8
SANN3

Vous pouvez voir comment Hector fait cela pour Cassandra, où l'objectif est le même: tout convertir de et vers byte[] afin de stocker/récupérer une base de données NoSQL - voir ici . Pour les types primitifs (+ String), il existe des sérialiseurs spéciaux, sinon il existe le générique ObjectSerializer (attend Serializable et utilise ObjectOutputStream.). Vous pouvez bien sûr l’utiliser uniquement pour tout, mais il peut y avoir des métadonnées redondantes dans le formulaire sérialisé.

Je suppose que vous pouvez copier l’ensemble du paquet et vous en servir.

5
Bozho