Class CompositeSerializer<T>

  • Type Parameters:
    T - type of custom serialized value
    All Implemented Interfaces:
    Serializable

    public abstract class CompositeSerializer<T>
    extends TypeSerializer<T>
    Base class for composite serializers.

    This class serializes a composite type using array of its field serializers. Fields are indexed the same way as their serializers.

    See Also:
    Serialized Form
    • Field Detail

      • fieldSerializers

        protected final TypeSerializer<Object>[] fieldSerializers
        Serializers for fields which constitute T.
    • Constructor Detail

      • CompositeSerializer

        protected CompositeSerializer​(boolean immutableTargetType,
                                      TypeSerializer<?>... fieldSerializers)
        Can be used for user facing constructor.
    • Method Detail

      • createInstance

        public abstract T createInstance​(@Nonnull
                                         Object... values)
        Create new instance from its fields.
      • setField

        protected abstract void setField​(@Nonnull
                                         T value,
                                         int index,
                                         Object fieldValue)
        Modify field of existing instance. Supported only by mutable types.
      • getField

        protected abstract Object getField​(@Nonnull
                                           T value,
                                           int index)
        Get field of existing instance.
      • duplicate

        public CompositeSerializer<T> duplicate()
        Description copied from class: TypeSerializer
        Creates a deep copy of this serializer if it is necessary, i.e. if it is stateful. This can return itself if the serializer is not stateful.

        We need this because Serializers might be used in several threads. Stateless serializers are inherently thread-safe while stateful serializers might not be thread-safe.

        Specified by:
        duplicate in class TypeSerializer<T>
      • isImmutableType

        public boolean isImmutableType()
        Description copied from class: TypeSerializer
        Gets whether the type is an immutable type.
        Specified by:
        isImmutableType in class TypeSerializer<T>
        Returns:
        True, if the type is immutable.
      • createInstance

        public T createInstance()
        Description copied from class: TypeSerializer
        Creates a new instance of the data type.
        Specified by:
        createInstance in class TypeSerializer<T>
        Returns:
        A new instance of the data type.
      • copy

        public T copy​(T from)
        Description copied from class: TypeSerializer
        Creates a deep copy of the given element in a new element.
        Specified by:
        copy in class TypeSerializer<T>
        Parameters:
        from - The element reuse be copied.
        Returns:
        A deep copy of the element.
      • copy

        public T copy​(T from,
                      T reuse)
        Description copied from class: TypeSerializer
        Creates a copy from the given element. The method makes an attempt to store the copy in the given reuse element, if the type is mutable. This is, however, not guaranteed.
        Specified by:
        copy in class TypeSerializer<T>
        Parameters:
        from - The element to be copied.
        reuse - The element to be reused. May or may not be used.
        Returns:
        A deep copy of the element.
      • getLength

        public int getLength()
        Description copied from class: TypeSerializer
        Gets the length of the data type, if it is a fix length data type.
        Specified by:
        getLength in class TypeSerializer<T>
        Returns:
        The length of the data type, or -1 for variable length data types.
      • serialize

        public void serialize​(T record,
                              DataOutputView target)
                       throws IOException
        Description copied from class: TypeSerializer
        Serializes the given record to the given target output view.
        Specified by:
        serialize in class TypeSerializer<T>
        Parameters:
        record - The record to serialize.
        target - The output view to write the serialized data to.
        Throws:
        IOException - Thrown, if the serialization encountered an I/O related error. Typically raised by the output view, which may have an underlying I/O channel to which it delegates.
      • deserialize

        public T deserialize​(DataInputView source)
                      throws IOException
        Description copied from class: TypeSerializer
        De-serializes a record from the given source input view.
        Specified by:
        deserialize in class TypeSerializer<T>
        Parameters:
        source - The input view from which to read the data.
        Returns:
        The deserialized element.
        Throws:
        IOException - Thrown, if the de-serialization encountered an I/O related error. Typically raised by the input view, which may have an underlying I/O channel from which it reads.
      • deserialize

        public T deserialize​(T reuse,
                             DataInputView source)
                      throws IOException
        Description copied from class: TypeSerializer
        De-serializes a record from the given source input view into the given reuse record instance if mutable.
        Specified by:
        deserialize in class TypeSerializer<T>
        Parameters:
        reuse - The record instance into which to de-serialize the data.
        source - The input view from which to read the data.
        Returns:
        The deserialized element.
        Throws:
        IOException - Thrown, if the de-serialization encountered an I/O related error. Typically raised by the input view, which may have an underlying I/O channel from which it reads.
      • copy

        public void copy​(DataInputView source,
                         DataOutputView target)
                  throws IOException
        Description copied from class: TypeSerializer
        Copies exactly one record from the source input view to the target output view. Whether this operation works on binary data or partially de-serializes the record to determine its length (such as for records of variable length) is up to the implementer. Binary copies are typically faster. A copy of a record containing two integer numbers (8 bytes total) is most efficiently implemented as target.write(source, 8);.
        Specified by:
        copy in class TypeSerializer<T>
        Parameters:
        source - The input view from which to read the record.
        target - The target output view to which to write the record.
        Throws:
        IOException - Thrown if any of the two views raises an exception.