Class 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 ElsaSerializerPojo Internally it uses Map<Class,Serializer> to decide what way to serialize class and Map<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 an NotSerializableException. But this method can be overridden in subclasses to add extra functionality(ElsaSerializerPojo is 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 an IOException. But this method can be overridden in subclasses to add extra functionality(ElsaSerializerPojo is subclass).

    • 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.IOException
        Description copied from interface: ElsaSerializer
        Converts object instance into binary form
        Specified by:
        serialize in interface ElsaSerializer
        Parameters:
        output - output into which binary data will be written while object is serialized
        obj - 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.IOException
        Description copied from interface: ElsaSerializer
        Deep 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:
        clone in interface ElsaSerializer
        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.IOException
        Description copied from interface: ElsaSerializer
        Reads binary data from input and converts them into object instances.
        Specified by:
        deserialize in interface ElsaSerializer
        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.IOException
        override this method to extend ElsaSerializerBase functionality
        Parameters:
        out - put binary data here
        obj - object to be serialized
        objectStack - 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.IOException
        override this method to extend ElsaSerializerBase functionality
        Parameters:
        is - read binary data from here
        head - binary header read from input stream
        objectStack - objectStack for handling backward references
        Returns:
        deserialized object
        Throws:
        ElsaException.UnknownHeaderByte - in default implementation if unknown Header Byte
        java.io.IOException - an exception from underlying stream
      • writeBooleanArray

        protected static void writeBooleanArray​(java.io.DataOutput out,
                                                boolean[] bool)
                                         throws java.io.IOException
        Writes boolean[] into output, each value in array is represented by single byte
        Parameters:
        out - write binary data here
        bool - 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.IOException
        Unpacks boolean[], each value in array is represented by single bite
        Parameters:
        numBools - number of booleans to read
        is - 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