有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java序列化与Kryo同步的地图

对于个人项目,我必须使用Kryo框架在Java中序列化Collections.sychronizedMap。我一定要使用这个框架,因为还有其他依赖项需要它。我目前的尝试是这样的:

Serializer SERIALIZER = Serializer.using(KryoNamespace.builder()
                    .register(KryoNamespaces.BASIC)
                    .register(Collections.EMPTY_MAP.getClass())
                    .register(Class.forName("java.util.Collections$SynchronizedMap"))
                    .build());

Map<String, String> map = Collections.synchronizedMap(new HashMap<String, String>());

map.put("test", "123");

byte[] encoded = SERIALIZER.encode(map);

Map<String, String> decoded = SERIALIZER.decode(encoded);

这种方法适用于序列化部分,但是我很难让反序列化工作。每当我运行这段代码时,在反序列化过程中调用synchronizedMap上的put方法时,就会抛出一个NullPointerException。造成这种情况的原因似乎是synchronizedMap使用的内部映射,因为它在反序列化后为null。但我的错在哪里?我能让这个代码工作吗


共 (1) 个答案

  1. # 1 楼答案

    我通过使用https://github.com/magro/kryo-serializers解决了这个问题,这是一个kryo库,专门针对序列化特殊java类型

    它可以像这样在KryoNamespace中注册:

    .register(new SynchronizedCollectionsSerializer(), Class.forName("java.util.Collections$SynchronizedMap"))
    

    从那时起,它就像一个符咒