Class ElsaMaker
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ClassLoaderprotected int3 isElsaStack.MapStackwith HashMap, 2 isElsaStack.IdentityArray, 1 isElsaStack.NoReferenceStack, 0 isElsaStack.MapStackwith IdentityHashMap,protected Map<Integer, ElsaSerializerBase.Deserializer> protected Map<Class, ElsaSerializerBase.Serializer> protected Object[]protected ElsaClassCallback -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionclassLoader(ClassLoader classLoader) User defined Class Loader used by Elsa to load classes.make()Creates new serializer with configuration from this builderUses linear object array to track backward references.Disables reference tracking.Uses HashMap to track backward references.registerClasses(Class... classes) Register classes structure.registerDeserializer(int header, ElsaSerializerBase.Deserializer deser) Register custom deserializer for single Header ID.<E> ElsaMakerregisterSerializer(int header, Class<E> clazz, ElsaSerializerBase.Serializer<E> serializer) Register user serializer for single class.singletons(Object... singletons) Register list of singletons.unknownClassNotification(ElsaClassCallback callback) Callback notified when class with unknown structure is serialized.
-
Field Details
-
classLoader
-
singletons
-
classes
-
unknownClassNotification
-
registeredSers
-
registeredSerHeaders
-
registeredDeser
-
objectStack
protected int objectStack3 isElsaStack.MapStackwith HashMap, 2 isElsaStack.IdentityArray, 1 isElsaStack.NoReferenceStack, 0 isElsaStack.MapStackwith IdentityHashMap,
-
-
Constructor Details
-
ElsaMaker
public ElsaMaker()
-
-
Method Details
-
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
Creates new serializer with configuration from this builder- Returns:
- new serializer
-
registerClasses
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
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 useserializer- serializer which turns object instance to binary data- Returns:
- this serializer
-
registerDeserializer
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
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
Uses linear object array to track backward references. Might by faster on tiny (~5 elements) object graphs.- Returns:
- this maker
-
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
User defined Class Loader used by Elsa to load classes.- Parameters:
classLoader- user defined Class Loader- Returns:
- this maker
-