2015-01-26 3 views
0

Я пытаюсь использовать kryo для serialed пользовательского класса, который сам содержит некоторые пользовательские объекты, а точнее HashMap пользовательских объектов. Мне было интересно, как правильно обращаться с чем-то подобным. Ниже приведен класс, который я пытаюсь сериализовать (Data), классы, которые являются вложенными, и моя текущая реализация kryo. Это правильный подход?Kryo Сериализация с вложенным HashMap с пользовательским классом

public class Data { 
    int id, 
    int name, 
    ItemList items; 
} 

public Class ItemList { 

    HashMap<String, Item> items; 
} 

public Class Item { 

    String itemId; 
    String itemName; 
    String itemDesc; 
} 

kryo.register(Data.class, new Serializer<Data>() { 
    public void write (Kryo kryo, Output output, Data object) { 
     output.writeInt(object.id); 
     output.writeInt(object.name); 
     kryo.writeClassAndObject(output, items); 
    } 

    public Tile read (Kryo kryo, Input input, Class<Data> type) { 
     Data data = new Data(); 
     kryo.reference(data); 
     data.id = input.readInt(); 
     data.name = input.readString(); 
     data.items = kryo.readClassAndObject(input); 
     return data; 
    } 
}); 

ответ

1

Вы можете использовать класс MapSerializer. Как:

MapSerializer serializer = new MapSerializer(); 
kryo.register(HashMap.class, serializer); 
kryo.register(LinkedHashMap.class, serializer); 
serializer.setKeyClass(String.class, kryo.getSerializer(String.class)); 
serializer.setKeysCanBeNull(false); 
serializer.setKeyClass(String.class, kryo.getSerializer(String.class)); 

Более того, вы можете получить здесь http://kryo.googlecode.com/svn-history/r416/trunk/test/com/esotericsoftware/kryo/MapSerializerTest.java

Смежные вопросы