java - 使用带有自定义类的嵌套 HashMap 进行 Kryo 序列化

标签 java serialization kryo

我正在尝试使用 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;
    }
});

最佳答案

您可以使用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

关于java - 使用带有自定义类的嵌套 HashMap 进行 Kryo 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157236/

相关文章:

java - 编写与 Python 接口(interface)的非常快速的抽象的语言选择?

java - Spring反序列化带有额外列的manytomany表

java自定义类不可序列化

java - Jettison 或 Kryo

java - DownloadManager 完成下载后无法移动文件

java - 如何关闭 JFrame 的窗口管理器紧急提示?

java - 如何根据名称获取类别?

c# - 如何将游戏状态存储到数据库中并使用 php 和 c# 脚本加载它

java - KryoNet - 向 Android 客户端发送数据包

java - Kryonet 刚连接就断开