La sérialisation d'un objet avec Kryo (Personnalisé Sérialiseur)
J'ai un objet qui contient un tableau d'objets. Je voudrais
-
A) stocker ce tableau d'objets dans le même fichier
-
B) utiliser la sérialisation personnalisée pour ces objets.
Par exemple, j'ai une table est un objet qui a du Carrelage[][] tableau. Je peux faire Ints, mais confus sur la façon de faire des objets:
kryo.register(Map.class, new SimpleSerializer<Map>() {
public void write(ByteBuffer buffer, Map map) {
buffer.putInt(map.getId());
System.out.println("Putting: " + map.getId());
}
public Map read(ByteBuffer buffer) {
int id = buffer.getInt();
System.out.println("Getting: " + id);
Map map = new Map(id, null, 0, 0, 0, 0);
return (map);
}
});
Vous devez vous connecter pour publier un commentaire.
Je peux dire à partir de votre exemple que vous êtes à l'aide de Kryo v1. Je suggère l'utilisation de Kryo v2.
Vous pouvez définir un sérialiseur pour la Carte, comme vous avez, puis sérialiser chaque clé et la valeur. Pour sérialiser chaque objet, soit écrire les données à l'aide de la Sortie de la classe et de la lecture à l'aide de l'Entrée de la classe, ou d'appeler des méthodes sur le Kryo exemple, manipuler les objets.
Il serait plus facile d'utiliser le construit en MapSerializer. Vous avez seulement besoin de personnaliser la sérialisation de votre Vignette d'objets. Vous pouvez étendre KryoSerializable ou vous pouvez enregistrer un Sérialiseur. Voici un exemple...
Voici un autre exemple, à l'aide d'un Sérialiseur au lieu de KryoSerializable:
C'est un peu plus compliqué dans la méthode de lecture en raison de l'appel de Kryo#de référence avant d'utiliser le Kryo instance désérialiser des objets enfants. Cela peut être omis si vous n'utilisez pas de références à tous, ou si vous savez que le "quelque chose" objet impossible de référence de la tuile que nous venons de créer. Si vous utilisez uniquement d'Entrée pour lire les données, vous n'avez pas besoin d'appeler Kryo#de référence.