kryo-serializers
kryo-serializers copied to clipboard
UnmodifiableCollectionsSerializer fails to copy values of unmodifiable map
I recently found that UnmodifiableCollectionsSerializer fails to copy values of unmodifiable map, as a workaround I am taking a copy of the values before, well, cloning.. :scream:
public static void main(String[] args) {
Map<Integer, Integer> map = Collections.unmodifiableMap(new HashMap<Integer, Integer>() {{
put(1, 1);
}});
KryoPool kryoPool = new KryoPool.Builder(() -> {
Kryo kryo = new Kryo();
kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
UnmodifiableCollectionsSerializer.registerSerializers(kryo);
return kryo;
}).softReferences().build();
kryoPool.run(kryo -> kryo.copy(map.values()));
}
Fails with..
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractCollection.add(AbstractCollection.java:262)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.copy(CollectionSerializer.java:149)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.copy(CollectionSerializer.java:40)
at com.esotericsoftware.kryo.Kryo.copy(Kryo.java:914)
at de.javakaffee.kryoserializers.UnmodifiableCollectionsSerializer.copy(UnmodifiableCollectionsSerializer.java:95)
at com.esotericsoftware.kryo.Kryo.copy(Kryo.java:914)
Thanks for reporting, do you want to submit a pull request?