Class ElsaMaker


  • public final class ElsaMaker
    extends java.lang.Object
    ElsaMaker is used to create and configure Elsa serializer.
    • Constructor Detail

      • ElsaMaker

        public ElsaMaker()
    • Method Detail

      • singletons

        public ElsaMaker singletons​(java.lang.Object... singletons)
        Register list of singletons. Singletons are serialized using only two bytes. Deserialized singletons keep reference equality. Note: Order in which singletons are registered defines storage format. To deserialize data back, you need to always register singleton at the same order.
        Parameters:
        singletons - array of singletons to be added to list of singletons
        Returns:
        this maker
      • make

        public ElsaSerializerPojo make()
        Creates new serializer with configuration from this builder
        Returns:
        new serializer
      • registerClasses

        public ElsaMaker registerClasses​(java.lang.Class... classes)
        Register classes structure. It saves space since class structure does not have to be saved together with data. Note: Order in which classes are registered defines storage format. To deserialize data back, you need to always register classes at the same order.
        Parameters:
        classes - classes which will be registered with class resolver
        Returns:
        this maker
      • unknownClassNotification

        public ElsaMaker unknownClassNotification​(ElsaClassCallback callback)
        Callback notified when class with unknown structure is serialized. You can than add unknown Class to your Class Catalog (or whatever you are using)
        Parameters:
        callback - callback notified when an unknown class is found
        Returns:
        this maker
      • registerSerializer

        public <E> ElsaMaker registerSerializer​(int header,
                                                java.lang.Class<E> clazz,
                                                ElsaSerializerBase.Serializer<E> serializer)

        Register user serializer for single class.

        Elsa decides what Serializer to use for each object based on objects class. Internally it uses Map<Class, Deserializer> to resolve serializer. Exact class match is used, so subclasses are not recognized and has to be registered separately.

        Each custom serializer also has Header ID. That is stored as part of binary data, Elsa uses this ID to decide what deserializer to use on deserialization. You need to register matching serializer with registerDeserializer(int, ElsaSerializerBase.Deserializer). Without ID, Elsa would not be able to deserialize binary data.

        Type Parameters:
        E - type of object
        Parameters:
        header - deserializer ID, is stored in binary data and used on deserialization.
        clazz - object class is used to decide what serializer to use
        serializer - serializer which turns object instance to binary data
        Returns:
        this serializer
      • referenceDisable

        public ElsaMaker referenceDisable()
        Disables reference tracking. With this setting Elsa will not recognize backward references. Circular reference will cause infinitive loop and Stack Overflow on serialization.
        Returns:
        this maker
      • referenceArrayEnable

        public ElsaMaker referenceArrayEnable()
        Uses linear object array to track backward references. Might by faster on tiny (~5 elements) object graphs.
        Returns:
        this maker
      • referenceHashMapEnable

        public ElsaMaker referenceHashMapEnable()
        Uses HashMap to track backward references. Normally IdentityHashMap is used, this settings track references but also performs deduplication using hashCode() and equals(). This setting slows down serialization significantly, but has zero overhead on deserialization.
        Returns:
        this maker
      • classLoader

        public ElsaMaker classLoader​(java.lang.ClassLoader classLoader)
        User defined Class Loader used by Elsa to load classes.
        Parameters:
        classLoader - user defined Class Loader
        Returns:
        this maker