Class Kryo
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class(package private) static final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanprivate ClassLoaderprivate final ClassResolverprivate ObjectMapprivate intprivate booleanprivate booleanprivate SerializerFactoryprivate final ArrayList<Kryo.DefaultSerializerEntry> private intprivate GenericsResolverprivate ObjectMapprivate final intprivate intprivate Objectprivate intprivate static final intstatic final bytestatic final byteprivate IdentityMapprivate Objectprivate final IntArrayprivate static final intprivate ReferenceResolverprivate booleanprivate booleanprivate org.objenesis.strategy.InstantiatorStrategyprivate Threadprivate boolean -
Constructor Summary
ConstructorsConstructorDescriptionKryo()Creates a new Kryo with aDefaultClassResolverand aMapReferenceResolver.Kryo(ClassResolver classResolver, ReferenceResolver referenceResolver) Kryo(ReferenceResolver referenceResolver) Creates a new Kryo with aDefaultClassResolver. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddDefaultSerializer(Class type, Serializer serializer) Instances of the specified class will use the specified serializer whenregister(Class)orregister(Class, int)are called.voidaddDefaultSerializer(Class type, SerializerFactory serializerFactory) Instances of the specified class will use the specified factory to create a serializer whenregister(Class)orregister(Class, int)are called.voidaddDefaultSerializer(Class type, Class<? extends Serializer> serializerClass) Instances of the specified class will use the specified serializer whenregister(Class)orregister(Class, int)are called.private void<T> Tcopy(T object) Returns a deep copy of the object.<T> Tcopy(T object, Serializer serializer) Returns a deep copy of the object using the specified serializer.<T> TcopyShallow(T object) Returns a shallow copy of the object.<T> TcopyShallow(T object, Serializer serializer) Returns a shallow copy of the object using the specified serializer.Name/value pairs that are available to all serializers.getDefaultSerializer(Class type) Returns the best matching serializer for a class.protected SerializerintgetDepth()Returns the number of child objects away from the object graph root.Name/value pairs that are available to all serializers and are cleared after each object graph is serialized or deserialized.org.objenesis.strategy.InstantiatorStrategyintReturns the lowest, next available integer ID.Returns the internal map of original to copy objects when a copy method is used.booleangetRegistration(int classID) getRegistration(Class type) If the class is not registered andsetRegistrationRequired(boolean)is false, it is automatically registered using thedefault serializer.getSerializer(Class type) Returns the serializer for the registration for the specified class.protected booleanReturns true if the specified type is a closure.booleanReturns true if the specified type is final.booleanbooleanprotected SerializernewDefaultSerializer(Class type) Called bygetDefaultSerializer(Class)when no default serializers matched the type.<T> TnewInstance(Class<T> type) Creates a new instance of a class usingRegistration.getInstantiator().protected org.objenesis.instantiator.ObjectInstantiatornewInstantiator(Class type) Returns a new instantiator for creating new instances of the specified type.Reads a class and returns its registration.readClassAndObject(Input input) Reads the class and object or null using the registered serializer.<T> TreadObject(Input input, Class<T> type) Reads an object using the registered serializer.<T> TreadObject(Input input, Class<T> type, Serializer serializer) Reads an object using the specified serializer.<T> TreadObjectOrNull(Input input, Class<T> type) Reads an object or null using the registered serializer.<T> TreadObjectOrNull(Input input, Class<T> type, Serializer serializer) Reads an object or null using the specified serializer.(package private) intreadReferenceOrNull(Input input, Class type, boolean mayBeNull) ReturnsREFif a reference to a previously read object was read, which is stored inreadObject.voidCalled bySerializer.read(Kryo, Input, Class)andSerializer.copy(Kryo, Object)before Kryo can be used to deserialize or copy child objects.register(Registration registration) Stores the specified registration.Registers the class using the lowest, next available integer ID and thedefault serializer.Registers the class using the specified ID and thedefault serializer.register(Class type, Serializer serializer) Registers the class using the lowest, next available integer ID and the specified serializer.register(Class type, Serializer serializer, int id) Registers the class using the specified ID and serializer.voidreset()Resets unregistered class names, references to previously serialized or deserialized objects, and thegraph context.voidsetAutoReset(boolean autoReset) If true (the default),reset()is called automatically after an entire object graph has been read or written.voidsetClassLoader(ClassLoader classLoader) Sets the classloader to resolve unregistered class names to classes.voidsetCopyReferences(boolean copyReferences) If true, whencopy(Object)and other copy methods encounter an object for the first time the object is copied and on subsequent encounters the copied object is used.voidsetDefaultSerializer(SerializerFactory serializer) Sets the serializer factory to use when nodefault serializersmatch an object's type.voidsetDefaultSerializer(Class<? extends Serializer> serializer) Sets the serializer to use when nodefault serializersmatch an object's type.voidsetInstantiatorStrategy(org.objenesis.strategy.InstantiatorStrategy strategy) Sets the strategy used bynewInstantiator(Class)for creating objects.voidsetMaxDepth(int maxDepth) Sets the maxiumum depth of an object graph.voidsetReferenceResolver(ReferenceResolver referenceResolver) Sets the reference resolver and enables references.booleansetReferences(boolean references) If true, each appearance of an object in the graph after the first is stored as an integer ordinal.voidsetRegistrationRequired(boolean registrationRequired) If true, an exception is thrown when an unregistered class is encountered.voidsetWarnUnregisteredClasses(boolean warnUnregisteredClasses) If true, kryo writes a warn log telling about the classes unregistered.protected StringwriteClass(Output output, Class type) Writes a class and returns its registration.voidwriteClassAndObject(Output output, Object object) Writes the class and object or null using the registered serializer.voidwriteObject(Output output, Object object) Writes an object using the registered serializer.voidwriteObject(Output output, Object object, Serializer serializer) Writes an object using the specified serializer.voidwriteObjectOrNull(Output output, Object object, Serializer serializer) Writes an object or null using the specified serializer.voidwriteObjectOrNull(Output output, Object object, Class type) Writes an object or null using the registered serializer for the specified type.(package private) booleanwriteReferenceOrNull(Output output, Object object, boolean mayBeNull)
-
Field Details
-
NULL
public static final byte NULL- See Also:
-
NOT_NULL
public static final byte NOT_NULL- See Also:
-
REF
private static final int REF- See Also:
-
NO_REF
private static final int NO_REF- See Also:
-
defaultSerializer
-
defaultSerializers
-
lowPriorityDefaultSerializerCount
private final int lowPriorityDefaultSerializerCount -
classResolver
-
nextRegisterID
private int nextRegisterID -
classLoader
-
strategy
private org.objenesis.strategy.InstantiatorStrategy strategy -
registrationRequired
private boolean registrationRequired -
warnUnregisteredClasses
private boolean warnUnregisteredClasses -
depth
private int depth -
maxDepth
private int maxDepth -
autoReset
private boolean autoReset -
thread
-
context
-
graphContext
-
referenceResolver
-
readReferenceIds
-
references
private boolean references -
copyReferences
private boolean copyReferences -
readObject
-
copyDepth
private int copyDepth -
copyShallow
private boolean copyShallow -
originalToCopy
-
needsCopyReference
-
genericsResolver
-
-
Constructor Details
-
Kryo
public Kryo()Creates a new Kryo with aDefaultClassResolverand aMapReferenceResolver. -
Kryo
Creates a new Kryo with aDefaultClassResolver.- Parameters:
referenceResolver- May be null to disable references.
-
Kryo
- Parameters:
referenceResolver- May be null to disable references.
-
-
Method Details
-
setDefaultSerializer
Sets the serializer factory to use when nodefault serializersmatch an object's type. Default isSerializerFactory.ReflectionSerializerFactorywithFieldSerializer.- See Also:
-
setDefaultSerializer
Sets the serializer to use when nodefault serializersmatch an object's type. Default isFieldSerializer.- See Also:
-
addDefaultSerializer
Instances of the specified class will use the specified serializer whenregister(Class)orregister(Class, int)are called.- See Also:
-
addDefaultSerializer
Instances of the specified class will use the specified factory to create a serializer whenregister(Class)orregister(Class, int)are called.- See Also:
-
addDefaultSerializer
Instances of the specified class will use the specified serializer whenregister(Class)orregister(Class, int)are called. Serializer instances are created as needed viaSerializerFactory.ReflectionSerializerFactory.newSerializer(Kryo, Class, Class). By default, the following classes have a default serializer set:boolean Boolean byte Byte char Character short Short int Integer long Long float Float double Double String byte[] char[] short[] int[] long[] float[] double[] String[] Object[] Map BigInteger BigDecimal KryoSerializable Collection Date Collections.emptyList Collections.singleton Currency StringBuilder Enum Collections.emptyMap Collections.emptySet Calendar StringBuffer Class Collections.singletonList Collections.singletonMap TimeZone TreeMap EnumSet Note that the order default serializers are added is important for a class that may match multiple types. The above default serializers always have a lower priority than subsequent default serializers that are added.
-
getDefaultSerializer
Returns the best matching serializer for a class. This method can be overridden to implement custom logic to choose a serializer. -
getDefaultSerializerForAnnotatedType
-
newDefaultSerializer
Called bygetDefaultSerializer(Class)when no default serializers matched the type. Subclasses can override this method to customize behavior. The default implementation callsSerializerFactory.newSerializer(Kryo, Class)using thedefault serializer. -
register
Registers the class using the lowest, next available integer ID and thedefault serializer. If the class is already registered, no change will be made and the existing registration will be returned. Registering a primitive also affects the corresponding primitive wrapper.Because the ID assigned is affected by the IDs registered before it, the order classes are registered is important when using this method. The order must be the same at deserialization as it was for serialization.
-
register
Registers the class using the specified ID and thedefault serializer. If the class is already registered this has no effect and the existing registration is returned. Registering a primitive also affects the corresponding primitive wrapper.IDs must be the same at deserialization as they were for serialization.
- Parameters:
id- Must be >= 0. Smaller IDs are serialized more efficiently. IDs 0-8 are used by default for primitive types and String, but these IDs can be repurposed.
-
register
Registers the class using the lowest, next available integer ID and the specified serializer. If the class is already registered, the existing entry is updated with the new serializer. Registering a primitive also affects the corresponding primitive wrapper.Because the ID assigned is affected by the IDs registered before it, the order classes are registered is important when using this method. The order must be the same at deserialization as it was for serialization.
-
register
Registers the class using the specified ID and serializer. Providing an ID that is already in use by the same type will cause the old entry to be overwritten. Registering a primitive also affects the corresponding primitive wrapper.IDs must be the same at deserialization as they were for serialization.
- Parameters:
id- Must be >= 0. Smaller IDs are serialized more efficiently. IDs 0-9 are used by default for primitive types and their wrappers, String, and void, but these IDs can be repurposed.
-
register
Stores the specified registration. If the ID is already in use by the same type, the old entry is overwritten. Registering a primitive also affects the corresponding primitive wrapper.IDs must be the same at deserialization as they were for serialization.
Registration can be suclassed to efficiently store per type information, accessible in serializers via
getRegistration(Class). -
getNextRegistrationId
public int getNextRegistrationId()Returns the lowest, next available integer ID. -
getRegistration
If the class is not registered andsetRegistrationRequired(boolean)is false, it is automatically registered using thedefault serializer.- Throws:
IllegalArgumentException- if the class is not registered andsetRegistrationRequired(boolean)is true.- See Also:
-
unregisteredClassMessage
-
getRegistration
- See Also:
-
getSerializer
Returns the serializer for the registration for the specified class.- See Also:
-
writeClass
Writes a class and returns its registration.- Parameters:
type- May be null.- Returns:
- Will be null if type is null.
- See Also:
-
writeObject
-
writeObject
Writes an object using the specified serializer. The registered serializer is ignored. -
writeObjectOrNull
-
writeObjectOrNull
Writes an object or null using the specified serializer. The registered serializer is ignored.- Parameters:
object- May be null.
-
writeClassAndObject
-
writeReferenceOrNull
-
readClass
Reads a class and returns its registration.- Returns:
- May be null.
- See Also:
-
readObject
-
readObject
Reads an object using the specified serializer. The registered serializer is ignored. -
readObjectOrNull
-
readObjectOrNull
Reads an object or null using the specified serializer. The registered serializer is ignored.- Returns:
- May be null.
-
readClassAndObject
-
readReferenceOrNull
ReturnsREFif a reference to a previously read object was read, which is stored inreadObject. Returns a stack size (> 0) if a reference ID has been put on the stack. -
reference
Called bySerializer.read(Kryo, Input, Class)andSerializer.copy(Kryo, Object)before Kryo can be used to deserialize or copy child objects. Calling this method is unnecessary if Kryo is not used to deserialize or copy child objects.- Parameters:
object- May be null, unless calling this method fromSerializer.copy(Kryo, Object).
-
reset
public void reset()Resets unregistered class names, references to previously serialized or deserialized objects, and thegraph context. Ifauto resetis true, this method is called automatically when an object graph has been completely serialized or deserialized. If overridden, the super method must be called. -
copy
public <T> T copy(T object) Returns a deep copy of the object. Serializers for the classes involved must supportSerializer.copy(Kryo, Object).- Parameters:
object- May be null.
-
copy
Returns a deep copy of the object using the specified serializer. Serializers for the classes involved must supportSerializer.copy(Kryo, Object).- Parameters:
object- May be null.
-
copyShallow
public <T> T copyShallow(T object) Returns a shallow copy of the object. Serializers for the classes involved must supportSerializer.copy(Kryo, Object).- Parameters:
object- May be null.
-
copyShallow
Returns a shallow copy of the object using the specified serializer. Serializers for the classes involved must supportSerializer.copy(Kryo, Object).- Parameters:
object- May be null.
-
beginObject
private void beginObject() -
getClassResolver
-
getReferenceResolver
- Returns:
- May be null.
-
setClassLoader
Sets the classloader to resolve unregistered class names to classes. The default is the loader that loaded the Kryo class. -
getClassLoader
-
setRegistrationRequired
public void setRegistrationRequired(boolean registrationRequired) If true, an exception is thrown when an unregistered class is encountered. Default is false.If false, when an unregistered class is encountered, its fully qualified class name will be serialized and the
default serializerfor the class used to serialize the object. Subsequent appearances of the class within the same object graph are serialized as an int id.Registered classes are serialized as an int id, avoiding the overhead of serializing the class name, but have the drawback of needing to know the classes to be serialized up front.
-
isRegistrationRequired
public boolean isRegistrationRequired() -
setWarnUnregisteredClasses
public void setWarnUnregisteredClasses(boolean warnUnregisteredClasses) If true, kryo writes a warn log telling about the classes unregistered. Default is false.If false, no log are written when unregistered classes are encountered.
-
isWarnUnregisteredClasses
public boolean isWarnUnregisteredClasses() -
setReferences
public boolean setReferences(boolean references) If true, each appearance of an object in the graph after the first is stored as an integer ordinal. When set to true,MapReferenceResolveris used. This enables references to the same object and cyclic graphs to be serialized, but typically adds overhead of one byte per object. Default is true.- Returns:
- The previous value.
-
setCopyReferences
public void setCopyReferences(boolean copyReferences) If true, whencopy(Object)and other copy methods encounter an object for the first time the object is copied and on subsequent encounters the copied object is used. If false, the overhead of tracking which objects have already been copied is avoided because each object is copied every time it is encountered, however a stack overflow will occur if an object graph is copied that contains a circular reference. Default is true. -
setReferenceResolver
Sets the reference resolver and enables references. -
getReferences
public boolean getReferences() -
setInstantiatorStrategy
public void setInstantiatorStrategy(org.objenesis.strategy.InstantiatorStrategy strategy) Sets the strategy used bynewInstantiator(Class)for creating objects. SeeStdInstantiatorStrategyto create objects via without calling any constructor. SeeSerializingInstantiatorStrategyto mimic Java's built-in serialization.- Parameters:
strategy- May be null.
-
getInstantiatorStrategy
public org.objenesis.strategy.InstantiatorStrategy getInstantiatorStrategy() -
newInstantiator
Returns a new instantiator for creating new instances of the specified type. By default, an instantiator is returned that uses reflection if the class has a zero argument constructor, an exception is thrown. If astrategyis set, it will be used instead of throwing an exception. -
newInstance
Creates a new instance of a class usingRegistration.getInstantiator(). If the registration's instantiator is null, a new one is set usingnewInstantiator(Class). -
getContext
Name/value pairs that are available to all serializers. -
getGraphContext
Name/value pairs that are available to all serializers and are cleared after each object graph is serialized or deserialized. -
getDepth
public int getDepth()Returns the number of child objects away from the object graph root. -
getOriginalToCopyMap
Returns the internal map of original to copy objects when a copy method is used. This can be used after a copy to map old objects to the copies, however it is cleared automatically byreset()so this is only useful whensetAutoReset(boolean)is false. -
setAutoReset
public void setAutoReset(boolean autoReset) -
setMaxDepth
public void setMaxDepth(int maxDepth) Sets the maxiumum depth of an object graph. This can be used to prevent malicious data from causing a stack overflow. Default isInteger.MAX_VALUE. -
isFinal
Returns true if the specified type is final. Final types can be serialized more efficiently because they are non-polymorphic.This can be overridden to force non-final classes to be treated as final. Eg, if an application uses ArrayList extensively but never uses an ArrayList subclass, treating ArrayList as final could allow FieldSerializer to save 1-2 bytes per ArrayList field.
-
isClosure
Returns true if the specified type is a closure.This can be overridden to support alternative implementations of clousres. Current version supports Oracle's Java8 only
-
getGenericsResolver
-