Class ElsaMaker

java.lang.Object
org.mapdb.elsa.ElsaMaker

public final class ElsaMaker extends Object
ElsaMaker is used to create and configure Elsa serializer.
  • Field Details

  • Constructor Details

    • ElsaMaker

      public ElsaMaker()
  • Method Details

    • singletons

      public ElsaMaker singletons(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(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, 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
    • registerDeserializer

      public ElsaMaker registerDeserializer(int header, ElsaSerializerBase.Deserializer deser)

      Register custom deserializer for single Header ID.

      Elsa stores Header ID in binary data, it is used to decide what deserializer to use. See registerSerializer(int, Class, ElsaSerializerBase.Serializer) for more details

      Parameters:
      header - associated with this deserializer.
      deser - deserializer used to turn binary data into object
      Returns:
      this maker
    • 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(ClassLoader classLoader)
      User defined Class Loader used by Elsa to load classes.
      Parameters:
      classLoader - user defined Class Loader
      Returns:
      this maker