kryo-serializers icon indicating copy to clipboard operation
kryo-serializers copied to clipboard

UnmodifiableCollectionsSerializer fails to copy values of unmodifiable map

Open johnou opened this issue 8 years ago • 1 comments

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)

johnou avatar Nov 30 '17 14:11 johnou

Thanks for reporting, do you want to submit a pull request?

magro avatar Jan 27 '18 22:01 magro