Class HashMapReferenceResolver

  • All Implemented Interfaces:
    ReferenceResolver

    public class HashMapReferenceResolver
    extends java.lang.Object
    implements ReferenceResolver
    Uses an IdentityHashMap to track objects that have already been written. This can handle a graph with any number of objects, but is slightly slower than MapReferenceResolver because IdentityHashMap allocates on put and slower slower than ListReferenceResolver for graphs with few objects.
    Author:
    Nathan Sweet
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected Kryo kryo  
      protected java.util.ArrayList readObjects  
      protected java.util.IdentityHashMap<java.lang.Object,​java.lang.Integer> writtenObjects  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int addWrittenObject​(java.lang.Object object)
      Returns a new ID for an object that is being written for the first time.
      java.lang.Object getReadObject​(java.lang.Class type, int id)
      Returns the object for the specified ID.
      int getWrittenId​(java.lang.Object object)
      Returns an ID for the object if it has been written previously, otherwise returns -1.
      int nextReadId​(java.lang.Class type)
      Reserves the ID for the next object that will be read.
      void reset()
      Called by Kryo.reset().
      void setKryo​(Kryo kryo)
      Sets the Kryo instance that this ClassResolver will be used for.
      void setReadObject​(int id, java.lang.Object object)
      Sets the ID for an object that has been read.
      boolean useReferences​(java.lang.Class type)
      Returns false for all primitive wrappers and enums.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • kryo

        protected Kryo kryo
      • writtenObjects

        protected final java.util.IdentityHashMap<java.lang.Object,​java.lang.Integer> writtenObjects
      • readObjects

        protected final java.util.ArrayList readObjects
    • Constructor Detail

      • HashMapReferenceResolver

        public HashMapReferenceResolver()
    • Method Detail

      • setKryo

        public void setKryo​(Kryo kryo)
        Description copied from interface: ReferenceResolver
        Sets the Kryo instance that this ClassResolver will be used for. This is called automatically by Kryo.
        Specified by:
        setKryo in interface ReferenceResolver
      • addWrittenObject

        public int addWrittenObject​(java.lang.Object object)
        Description copied from interface: ReferenceResolver
        Returns a new ID for an object that is being written for the first time.
        Specified by:
        addWrittenObject in interface ReferenceResolver
        Returns:
        The ID, which is stored more efficiently if it is positive and must not be -1 or -2.
      • getWrittenId

        public int getWrittenId​(java.lang.Object object)
        Description copied from interface: ReferenceResolver
        Returns an ID for the object if it has been written previously, otherwise returns -1.
        Specified by:
        getWrittenId in interface ReferenceResolver
      • nextReadId

        public int nextReadId​(java.lang.Class type)
        Description copied from interface: ReferenceResolver
        Reserves the ID for the next object that will be read. This is called only the first time an object is encountered.
        Specified by:
        nextReadId in interface ReferenceResolver
        Parameters:
        type - The type of object that will be read.
        Returns:
        The ID, which is stored more efficiently if it is positive and must not be -1 or -2.
      • useReferences

        public boolean useReferences​(java.lang.Class type)
        Returns false for all primitive wrappers and enums.
        Specified by:
        useReferences in interface ReferenceResolver
        Parameters:
        type - Will never be a primitive type, but may be a primitive type wrapper.