/** * Copy-constructor that does not copy transient fields. They will be initialized once required. */ protected KryoSerializer(KryoSerializer<T> toCopy) { this.type = checkNotNull(toCopy.type, "Type class cannot be null."); this.defaultSerializerClasses = toCopy.defaultSerializerClasses; this.defaultSerializers = new LinkedHashMap<>(toCopy.defaultSerializers.size()); this.kryoRegistrations = new LinkedHashMap<>(toCopy.kryoRegistrations.size()); // deep copy the serializer instances in defaultSerializers for (Map.Entry<Class<?>, ExecutionConfig.SerializableSerializer<?>> entry : toCopy.defaultSerializers.entrySet()) { this.defaultSerializers.put(entry.getKey(), deepCopySerializer(entry.getValue())); } // deep copy the serializer instances in kryoRegistrations for (Map.Entry<String, KryoRegistration> entry : toCopy.kryoRegistrations.entrySet()) { KryoRegistration kryoRegistration = entry.getValue(); if (kryoRegistration.getSerializerDefinitionType() == KryoRegistration.SerializerDefinitionType.INSTANCE) { ExecutionConfig.SerializableSerializer<? extends Serializer<?>> serializerInstance = kryoRegistration.getSerializableSerializerInstance(); if (serializerInstance != null) { kryoRegistration = new KryoRegistration( kryoRegistration.getRegisteredClass(), deepCopySerializer(serializerInstance)); } } this.kryoRegistrations.put(entry.getKey(), kryoRegistration); } }
@Override public void write(DataOutputView out) throws IOException { out.writeUTF(kryoRegistration.getRegisteredClass().getName()); final KryoRegistration.SerializerDefinitionType serializerDefinitionType = kryoRegistration.getSerializerDefinitionType(); out.writeInt(serializerDefinitionType.ordinal()); switch (serializerDefinitionType) { case UNSPECIFIED: // nothing else to write break; case CLASS: out.writeUTF(kryoRegistration.getSerializerClass().getName()); break; case INSTANCE: try (final DataOutputViewStream outViewWrapper = new DataOutputViewStream(out)) { InstantiationUtil.serializeObject(outViewWrapper, kryoRegistration.getSerializableSerializerInstance()); } break; default: // this should not happen; adding as a guard for the future throw new IllegalStateException( "Unrecognized Kryo registration serializer definition type: " + serializerDefinitionType); } }
/** * Copy-constructor that does not copy transient fields. They will be initialized once required. */ protected KryoSerializer(KryoSerializer<T> toCopy) { this.type = checkNotNull(toCopy.type, "Type class cannot be null."); this.defaultSerializerClasses = toCopy.defaultSerializerClasses; this.defaultSerializers = new LinkedHashMap<>(toCopy.defaultSerializers.size()); this.kryoRegistrations = new LinkedHashMap<>(toCopy.kryoRegistrations.size()); // deep copy the serializer instances in defaultSerializers for (Map.Entry<Class<?>, ExecutionConfig.SerializableSerializer<?>> entry : toCopy.defaultSerializers.entrySet()) { this.defaultSerializers.put(entry.getKey(), deepCopySerializer(entry.getValue())); } // deep copy the serializer instances in kryoRegistrations for (Map.Entry<String, KryoRegistration> entry : toCopy.kryoRegistrations.entrySet()) { KryoRegistration kryoRegistration = entry.getValue(); if (kryoRegistration.getSerializerDefinitionType() == KryoRegistration.SerializerDefinitionType.INSTANCE) { ExecutionConfig.SerializableSerializer<? extends Serializer<?>> serializerInstance = kryoRegistration.getSerializableSerializerInstance(); if (serializerInstance != null) { kryoRegistration = new KryoRegistration( kryoRegistration.getRegisteredClass(), deepCopySerializer(serializerInstance)); } } this.kryoRegistrations.put(entry.getKey(), kryoRegistration); } }
/** * Copy-constructor that does not copy transient fields. They will be initialized once required. */ protected KryoSerializer(KryoSerializer<T> toCopy) { this.type = checkNotNull(toCopy.type, "Type class cannot be null."); this.defaultSerializerClasses = toCopy.defaultSerializerClasses; this.defaultSerializers = new LinkedHashMap<>(toCopy.defaultSerializers.size()); this.kryoRegistrations = new LinkedHashMap<>(toCopy.kryoRegistrations.size()); // deep copy the serializer instances in defaultSerializers for (Map.Entry<Class<?>, ExecutionConfig.SerializableSerializer<?>> entry : toCopy.defaultSerializers.entrySet()) { this.defaultSerializers.put(entry.getKey(), deepCopySerializer(entry.getValue())); } // deep copy the serializer instances in kryoRegistrations for (Map.Entry<String, KryoRegistration> entry : toCopy.kryoRegistrations.entrySet()) { KryoRegistration kryoRegistration = entry.getValue(); if (kryoRegistration.getSerializerDefinitionType() == KryoRegistration.SerializerDefinitionType.INSTANCE) { ExecutionConfig.SerializableSerializer<? extends Serializer<?>> serializerInstance = kryoRegistration.getSerializableSerializerInstance(); if (serializerInstance != null) { kryoRegistration = new KryoRegistration( kryoRegistration.getRegisteredClass(), deepCopySerializer(serializerInstance)); } } this.kryoRegistrations.put(entry.getKey(), kryoRegistration); } }
@Override public void write(DataOutputView out) throws IOException { out.writeUTF(kryoRegistration.getRegisteredClass().getName()); final KryoRegistration.SerializerDefinitionType serializerDefinitionType = kryoRegistration.getSerializerDefinitionType(); out.writeInt(serializerDefinitionType.ordinal()); switch (serializerDefinitionType) { case UNSPECIFIED: // nothing else to write break; case CLASS: out.writeUTF(kryoRegistration.getSerializerClass().getName()); break; case INSTANCE: try (final DataOutputViewStream outViewWrapper = new DataOutputViewStream(out)) { InstantiationUtil.serializeObject(outViewWrapper, kryoRegistration.getSerializableSerializerInstance()); } break; default: // this should not happen; adding as a guard for the future throw new IllegalStateException( "Unrecognized Kryo registration serializer definition type: " + serializerDefinitionType); } }
@Override public void write(DataOutputView out) throws IOException { out.writeUTF(kryoRegistration.getRegisteredClass().getName()); final KryoRegistration.SerializerDefinitionType serializerDefinitionType = kryoRegistration.getSerializerDefinitionType(); out.writeInt(serializerDefinitionType.ordinal()); switch (serializerDefinitionType) { case UNSPECIFIED: // nothing else to write break; case CLASS: out.writeUTF(kryoRegistration.getSerializerClass().getName()); break; case INSTANCE: try (final DataOutputViewStream outViewWrapper = new DataOutputViewStream(out)) { InstantiationUtil.serializeObject(outViewWrapper, kryoRegistration.getSerializableSerializerInstance()); } break; default: // this should not happen; adding as a guard for the future throw new IllegalStateException( "Unrecognized Kryo registration serializer definition type: " + serializerDefinitionType); } }