2015-01-26 5 views
0

kryo를 사용하여 사용자 정의 클래스, 특히 사용자 정의 객체의 HashMap을 포함하는 사용자 정의 클래스를 serialize하려고합니다. 나는 이와 같은 것을 처리 할 수있는 적절한 방법이 궁금합니다. 아래는 직렬화하려고하는 클래스 (Data), 중첩 된 클래스 및 현재 kryo 구현입니다. 이것이 올바른 접근 방법입니까?사용자 정의 클래스로 중첩 된 HashMap을 사용하여 Kryo 직렬화

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

를 얻을 수 있습니다