2015-01-26 331 views
0

我想用户kryo序列化一个自定义类本身包含一些自定义对象,更具体地是自定义对象的HashMap。我想知道处理这种事情的正确方法。下面是我尝试序列化(数据)的类,嵌套的类以及当前的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