Kryo:如何忽略集合中的类?

问题描述

我正在使用 Kryo(库中的新手)来序列化我的数据。其中一个类(配置类)是一个集合 HashMap,它包含键和值。这些值由不同的类组成(即:字符串、整数和配置选项的自定义实现)。此映射中的某些数据不应序列化。但是,我一直无法找到跳过这些元素的好方法。

我当前的实现涉及为我希望跳过的每个类创建一个名为 IgnoreSerializer 的自定义序列化程序。写入中没有代码,读取返回空对象(见下文)。不幸的是,这并没有那么好,因为 null 被插入到 Map 中,我必须遍历集合以删除 null 元素的所有实例。这是我可以接受的解决方法,但必须有更好的方法。这也有忽略这个类的每个对象的缺点,我可能希望在另一个位置序列化。

kryo.register(ComplexConfiguration.class,IgnoreSerializer.class);

...

@Override
public void write ( Kryo kryo,Output output,Object object )
{
    //System.out.println("IgnoreSerializer: Ignored Class: " + object.getClass());  
}

@Override
public Object read ( Kryo kryo,Input input,Class<? extends Object> type )
{
    return null;
}

我还想避免复制此(或任何)集合并对其进行序列化。

我还有哪些选择?

编辑: 另一种解决方案是创建一个自定义集合,我可以在其中注册被忽略的类和其他数据,并且不接受空值。然后使用它而不是 HashMap (可能会继承它)。我必须看看这在 Kryo 使用时是否有效,正如我目前假设的那样,他们使用 put 方法(我可以覆盖它)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)