Class ElsaSerializerBase
- java.lang.Object
-
- org.mapdb.elsa.ElsaSerializerBase
-
- All Implemented Interfaces:
ElsaSerializer
- Direct Known Subclasses:
ElsaSerializerPojo
public class ElsaSerializerBase extends java.lang.Object implements ElsaSerializer
Basic Elsa serializer and deserializer. It recognizes some 'java.lang.*' and 'java.util.*' classes such as Long, String, HashMap...
This serializer does not analyze class structure and fields. This functionality is in
ElsaSerializerPojoInternally it usesMap<Class,Serializer>to decide what way to serialize class andMap<HeaderByte, Deserializer>to deserialize data.If this serializer finds unknown class at graph traversal, it will pass it to
serializeUnknownObject(DataOutput, Object, ElsaStack)function for serialization. By default this throws anNotSerializableException. But this method can be overridden in subclasses to add extra functionality(ElsaSerializerPojois subclass).If this deserializer finds unknown Header Byte (binary data type), it will pass it to
deserializeUnknownHeader(DataInput, int, ElsaStack)function for deserialization. By default this throws anIOException. But this method can be overridden in subclasses to add extra functionality(ElsaSerializerPojois subclass).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classElsaSerializerBase.Deserializer<A>Interface internally used by Elsa to deserialize concrete Header Byte.protected static classElsaSerializerBase.DeserIntprotected static classElsaSerializerBase.DeserLongprotected classElsaSerializerBase.DeserSingletonalways returns single object without reading anythingprotected static classElsaSerializerBase.DeserStringLenprotected static interfaceElsaSerializerBase.HeaderHeader byte, is used at start of each record to indicate data type WARNING !!! values bellow must be unique !!!!!static classElsaSerializerBase.Serializer<A>Interface internally used by Elsa to serialize concrete single class.protected static classElsaSerializerBase.UserSerializerUser Serializers have designated Header Byte, followed by packed Int which identifies User Serializer.
-
Field Summary
-
Constructor Summary
Constructors Constructor Description ElsaSerializerBase()ElsaSerializerBase(java.lang.ClassLoader classLoader, int objectStackType, java.lang.Object[] singletons, java.util.Map<java.lang.Class,ElsaSerializerBase.Serializer> userSer, java.util.Map<java.lang.Class,java.lang.Integer> userSerHeaders, java.util.Map<java.lang.Integer,ElsaSerializerBase.Deserializer> userDeser)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description <E> Eclone(E value)Deep binary clone.protected static java.lang.ClassLoaderdefaultClassLoaderIfNull(java.lang.ClassLoader classLoader)<E> Edeserialize(java.io.DataInput input)Reads binary data from input and converts them into object instances.java.lang.Objectdeserialize(java.io.DataInput in, ElsaStack objectStack)private java.util.ArrayList<java.lang.Object>deserializeArrayList(java.io.DataInput is, ElsaStack objectStack)private java.lang.Object[]deserializeArrayObject(java.io.DataInput is, ElsaStack objectStack)private java.util.HashMap<java.lang.Object,java.lang.Object>deserializeHashMap(java.io.DataInput is, ElsaStack objectStack)private java.util.HashSet<java.lang.Object>deserializeHashSet(java.io.DataInput is, ElsaStack objectStack)private java.util.LinkedHashMap<java.lang.Object,java.lang.Object>deserializeLinkedHashMap(java.io.DataInput is, ElsaStack objectStack)private java.util.LinkedHashSet<java.lang.Object>deserializeLinkedHashSet(java.io.DataInput is, ElsaStack objectStack)private java.util.LinkedListdeserializeLinkedList(java.io.DataInput is, ElsaStack objectStack)private java.util.PropertiesdeserializeProperties(java.io.DataInput is, ElsaStack objectStack)protected java.lang.ObjectdeserializeSingleton(java.io.DataInput is, ElsaStack objectStack)(package private) static java.lang.StringdeserializeString(java.io.DataInput buf, int len)private java.util.TreeMap<java.lang.Object,java.lang.Object>deserializeTreeMap(java.io.DataInput is, ElsaStack objectStack)private java.util.TreeSet<java.lang.Object>deserializeTreeSet(java.io.DataInput is, ElsaStack objectStack)protected java.lang.ObjectdeserializeUnknownHeader(java.io.DataInput is, int head, ElsaStack objectStack)override this method to extend ElsaSerializerBase functionalityprotected voidinitHeaderDeser()protected voidinitSer()booleanisSerializable(java.lang.Object o)Checks if given object is known to Elsa.protected java.lang.Class<?>loadClassCached(java.lang.String name)protected java.lang.Class<?>loadClassCached(java.lang.String name, java.lang.ClassLoader classLoader)protected java.lang.ClassloadClassCachedUnchecked(java.lang.String name)protected ElsaStacknewElsaStack()protected static boolean[]readBooleanArray(int numBools, java.io.DataInput is)Unpacks boolean[], each value in array is represented by single bitevoidserialize(java.io.DataOutput output, java.lang.Object obj)Converts object instance into binary formvoidserialize(java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack)protected voidserializeClass(java.io.DataOutput out, java.lang.Class clazz)private voidserializeCollection(int header, java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack)private voidserializeMap(int header, java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack)voidserializeObjectArray(java.io.DataOutput out, java.lang.Object[] b, ElsaStack objectStack)protected voidserializeUnknownObject(java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack)override this method to extend ElsaSerializerBase functionalityprotected static voidwriteBooleanArray(java.io.DataOutput out, boolean[] bool)Writes boolean[] into output, each value in array is represented by single byte
-
-
-
Field Detail
-
objectStackType
protected final int objectStackType
-
singletons
protected final java.lang.Object[] singletons
-
singletonsReverse
protected final java.util.IdentityHashMap<java.lang.Object,java.lang.Integer> singletonsReverse
-
ser
protected final java.util.Map<java.lang.Class,ElsaSerializerBase.Serializer> ser
-
classCache
protected final java.util.Map<java.lang.String,java.lang.Class> classCache
-
headerDeser
protected final ElsaSerializerBase.Deserializer[] headerDeser
-
userDeser
protected final ElsaSerializerBase.Deserializer[] userDeser
-
classLoader
protected final java.lang.ClassLoader classLoader
-
SER_STRING
protected static final ElsaSerializerBase.Serializer SER_STRING
-
SER_LONG_ARRAY
protected static final ElsaSerializerBase.Serializer SER_LONG_ARRAY
-
SER_INT_ARRAY
protected static final ElsaSerializerBase.Serializer SER_INT_ARRAY
-
SER_DOUBLE
protected static final ElsaSerializerBase.Serializer SER_DOUBLE
-
SER_FLOAT
protected static final ElsaSerializerBase.Serializer SER_FLOAT
-
SER_SHORT
protected static final ElsaSerializerBase.Serializer SER_SHORT
-
SER_CHAR
protected static final ElsaSerializerBase.Serializer SER_CHAR
-
SER_BYTE
protected static final ElsaSerializerBase.Serializer SER_BYTE
-
SER_BOOLEAN
protected static final ElsaSerializerBase.Serializer SER_BOOLEAN
-
SER_LONG
protected static final ElsaSerializerBase.Serializer SER_LONG
-
SER_INT
protected static final ElsaSerializerBase.Serializer SER_INT
-
SER_BYTE_ARRAY
protected static final ElsaSerializerBase.Serializer<byte[]> SER_BYTE_ARRAY
-
DESER_BYTE_ARRAY
protected static final ElsaSerializerBase.Deserializer<byte[]> DESER_BYTE_ARRAY
-
-
Constructor Detail
-
ElsaSerializerBase
public ElsaSerializerBase()
-
ElsaSerializerBase
public ElsaSerializerBase(java.lang.ClassLoader classLoader, int objectStackType, java.lang.Object[] singletons, java.util.Map<java.lang.Class,ElsaSerializerBase.Serializer> userSer, java.util.Map<java.lang.Class,java.lang.Integer> userSerHeaders, java.util.Map<java.lang.Integer,ElsaSerializerBase.Deserializer> userDeser)
-
-
Method Detail
-
loadClassCached
protected java.lang.Class<?> loadClassCached(java.lang.String name) throws java.lang.ClassNotFoundException- Throws:
java.lang.ClassNotFoundException
-
loadClassCached
protected java.lang.Class<?> loadClassCached(java.lang.String name, java.lang.ClassLoader classLoader) throws java.lang.ClassNotFoundException- Throws:
java.lang.ClassNotFoundException
-
loadClassCachedUnchecked
protected java.lang.Class loadClassCachedUnchecked(java.lang.String name)
-
defaultClassLoaderIfNull
protected static java.lang.ClassLoader defaultClassLoaderIfNull(java.lang.ClassLoader classLoader)
-
initSer
protected void initSer()
-
serializeObjectArray
public void serializeObjectArray(java.io.DataOutput out, java.lang.Object[] b, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
initHeaderDeser
protected void initHeaderDeser()
-
serialize
public void serialize(java.io.DataOutput output, java.lang.Object obj) throws java.io.IOExceptionDescription copied from interface:ElsaSerializerConverts object instance into binary form- Specified by:
serializein interfaceElsaSerializer- Parameters:
output- output into which binary data will be written while object is serializedobj- object instance to be serialized- Throws:
java.io.IOException- an exception from underlying stream
-
newElsaStack
protected ElsaStack newElsaStack()
-
clone
public <E> E clone(E value) throws java.io.IOExceptionDescription copied from interface:ElsaSerializerDeep binary clone. Serialize object into binary form, and then use data to deserialize it. Returned object should be equal to original, but is completely different instance.- Specified by:
clonein interfaceElsaSerializer- Type Parameters:
E- type of cloned object- Parameters:
value- object instance to be cloned- Returns:
- deep clone
- Throws:
java.io.IOException- an exception from underlying stream
-
serialize
public void serialize(java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
serializeClass
protected void serializeClass(java.io.DataOutput out, java.lang.Class clazz) throws java.io.IOException- Throws:
java.io.IOException
-
serializeMap
private void serializeMap(int header, java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
serializeCollection
private void serializeCollection(int header, java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeString
static java.lang.String deserializeString(java.io.DataInput buf, int len) throws java.io.IOException- Throws:
java.io.IOException
-
deserialize
public <E> E deserialize(java.io.DataInput input) throws java.io.IOExceptionDescription copied from interface:ElsaSerializerReads binary data from input and converts them into object instances.- Specified by:
deserializein interfaceElsaSerializer- Type Parameters:
E- type of deserialized object- Parameters:
input- input to read data from- Returns:
- deserialized object
- Throws:
java.io.IOException- an exception from underlying stream
-
deserialize
public java.lang.Object deserialize(java.io.DataInput in, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeSingleton
protected java.lang.Object deserializeSingleton(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeArrayObject
private java.lang.Object[] deserializeArrayObject(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeArrayList
private java.util.ArrayList<java.lang.Object> deserializeArrayList(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeLinkedList
private java.util.LinkedList deserializeLinkedList(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeHashSet
private java.util.HashSet<java.lang.Object> deserializeHashSet(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeLinkedHashSet
private java.util.LinkedHashSet<java.lang.Object> deserializeLinkedHashSet(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeTreeSet
private java.util.TreeSet<java.lang.Object> deserializeTreeSet(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeTreeMap
private java.util.TreeMap<java.lang.Object,java.lang.Object> deserializeTreeMap(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeHashMap
private java.util.HashMap<java.lang.Object,java.lang.Object> deserializeHashMap(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeLinkedHashMap
private java.util.LinkedHashMap<java.lang.Object,java.lang.Object> deserializeLinkedHashMap(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
deserializeProperties
private java.util.Properties deserializeProperties(java.io.DataInput is, ElsaStack objectStack) throws java.io.IOException- Throws:
java.io.IOException
-
serializeUnknownObject
protected void serializeUnknownObject(java.io.DataOutput out, java.lang.Object obj, ElsaStack objectStack) throws java.io.IOExceptionoverride this method to extend ElsaSerializerBase functionality- Parameters:
out- put binary data hereobj- object to be serializedobjectStack- objectStack for handling backward references- Throws:
java.io.IOException- an exception from underlying stream
-
deserializeUnknownHeader
protected java.lang.Object deserializeUnknownHeader(java.io.DataInput is, int head, ElsaStack objectStack) throws java.io.IOExceptionoverride this method to extend ElsaSerializerBase functionality- Parameters:
is- read binary data from herehead- binary header read from input streamobjectStack- objectStack for handling backward references- Returns:
- deserialized object
- Throws:
ElsaException.UnknownHeaderByte- in default implementation if unknown Header Bytejava.io.IOException- an exception from underlying stream
-
writeBooleanArray
protected static void writeBooleanArray(java.io.DataOutput out, boolean[] bool) throws java.io.IOExceptionWrites boolean[] into output, each value in array is represented by single byte- Parameters:
out- write binary data herebool- The booleans to be writen- Throws:
java.io.IOException- an exception from underlying stream
-
readBooleanArray
protected static boolean[] readBooleanArray(int numBools, java.io.DataInput is) throws java.io.IOExceptionUnpacks boolean[], each value in array is represented by single bite- Parameters:
numBools- number of booleans to readis- read data from here- Returns:
- The boolean array decompressed from the bytes read in.
- Throws:
java.io.IOException- If an error occurred while reading.
-
isSerializable
public boolean isSerializable(java.lang.Object o)
Checks if given object is known to Elsa. If false is returned, Elsa will use less efficient field serializer.- Parameters:
o- object to be checked- Returns:
- true if mapdb knows howto serialize given object
-
-