Для личного проекта мне нужно сериализовать Collections.sychronizedMap
в Java с использованием Kryo-Framework. Я связан с этой структурой, поскольку есть другие зависимости, требующие этого. Моя нынешняя попытка это выглядит так:
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);
Этот подход работает для части сериализации, однако я изо всех сил пытаюсь заставить десериализацию работать. Всякий раз, когда я запускаю этот фрагмент кода, NullPointerException
генерируется, когда метод put
для synchronizedMap вызывается во время процесса десериализации. Причиной этого, по-видимому, является внутренняя карта, которую использует synchronizedMap, поскольку после десериализации она равна нулю. Но где моя ошибка? Можно ли как-нибудь заставить этот код работать?