Class ElsaMaker
- java.lang.Object
-
- org.mapdb.elsa.ElsaMaker
-
public final class ElsaMaker extends java.lang.ObjectElsaMaker is used to create and configure Elsa serializer.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<java.lang.Class>classesprotected java.lang.ClassLoaderclassLoaderprotected intobjectStack3 isElsaStack.MapStackwith HashMap, 2 isElsaStack.IdentityArray, 1 isElsaStack.NoReferenceStack, 0 isElsaStack.MapStackwith IdentityHashMap,protected java.util.Map<java.lang.Integer,ElsaSerializerBase.Deserializer>registeredDeserprotected java.util.Map<java.lang.Class,java.lang.Integer>registeredSerHeadersprotected java.util.Map<java.lang.Class,ElsaSerializerBase.Serializer>registeredSersprotected java.lang.Object[]singletonsprotected ElsaClassCallbackunknownClassNotification
-
Constructor Summary
Constructors Constructor Description ElsaMaker()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ElsaMakerclassLoader(java.lang.ClassLoader classLoader)User defined Class Loader used by Elsa to load classes.ElsaSerializerPojomake()Creates new serializer with configuration from this builderElsaMakerreferenceArrayEnable()Uses linear object array to track backward references.ElsaMakerreferenceDisable()Disables reference tracking.ElsaMakerreferenceHashMapEnable()Uses HashMap to track backward references.ElsaMakerregisterClasses(java.lang.Class... classes)Register classes structure.ElsaMakerregisterDeserializer(int header, ElsaSerializerBase.Deserializer deser)Register custom deserializer for single Header ID.<E> ElsaMakerregisterSerializer(int header, java.lang.Class<E> clazz, ElsaSerializerBase.Serializer<E> serializer)Register user serializer for single class.ElsaMakersingletons(java.lang.Object... singletons)Register list of singletons.ElsaMakerunknownClassNotification(ElsaClassCallback callback)Callback notified when class with unknown structure is serialized.
-
-
-
Field Detail
-
classLoader
protected java.lang.ClassLoader classLoader
-
singletons
protected java.lang.Object[] singletons
-
classes
protected java.util.List<java.lang.Class> classes
-
unknownClassNotification
protected ElsaClassCallback unknownClassNotification
-
registeredSers
protected java.util.Map<java.lang.Class,ElsaSerializerBase.Serializer> registeredSers
-
registeredSerHeaders
protected java.util.Map<java.lang.Class,java.lang.Integer> registeredSerHeaders
-
registeredDeser
protected java.util.Map<java.lang.Integer,ElsaSerializerBase.Deserializer> registeredDeser
-
objectStack
protected int objectStack
3 isElsaStack.MapStackwith HashMap, 2 isElsaStack.IdentityArray, 1 isElsaStack.NoReferenceStack, 0 isElsaStack.MapStackwith IdentityHashMap,
-
-
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 useserializer- 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. NormallyIdentityHashMapis used, this settings track references but also performs deduplication usinghashCode()andequals(). 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
-
-