public class Kryo extends Object
Modifier and Type | Class and Description |
---|---|
static class |
Kryo.DefaultInstantiatorStrategy |
Constructor and Description |
---|
Kryo()
Creates a new Kryo with a
DefaultClassResolver and a MapReferenceResolver . |
Kryo(ClassResolver classResolver,
ReferenceResolver referenceResolver) |
Kryo(ClassResolver classResolver,
ReferenceResolver referenceResolver,
StreamFactory streamFactory) |
Kryo(ReferenceResolver referenceResolver)
Creates a new Kryo with a
DefaultClassResolver . |
Modifier and Type | Method and Description |
---|---|
void |
addDefaultSerializer(Class type,
Class<? extends Serializer> serializerClass)
Instances of the specified class will use the specified serializer when
register(Class) or
register(Class, int) are called. |
void |
addDefaultSerializer(Class type,
Serializer serializer)
Instances of the specified class will use the specified serializer when
register(Class) or
register(Class, int) are called. |
void |
addDefaultSerializer(Class type,
SerializerFactory serializerFactory)
Instances of the specified class will use the specified factory to create a serializer when
register(Class) or
register(Class, int) are called. |
<T> T |
copy(T object)
Returns a deep copy of the object.
|
<T> T |
copy(T object,
Serializer serializer)
Returns a deep copy of the object using the specified serializer.
|
<T> T |
copyShallow(T object)
Returns a shallow copy of the object.
|
<T> T |
copyShallow(T object,
Serializer serializer)
Returns a shallow copy of the object using the specified serializer.
|
boolean |
getAsmEnabled()
Deprecated.
Use
getFieldSerializerConfig() to change the default FieldSerializer configuration. |
ClassLoader |
getClassLoader() |
ClassResolver |
getClassResolver() |
ObjectMap |
getContext()
Name/value pairs that are available to all serializers.
|
Serializer |
getDefaultSerializer(Class type)
Returns the best matching serializer for a class.
|
protected Serializer |
getDefaultSerializerForAnnotatedType(Class type) |
int |
getDepth()
Returns the number of child objects away from the object graph root.
|
FieldSerializerConfig |
getFieldSerializerConfig()
The default configuration for
FieldSerializer instances. |
GenericsResolver |
getGenericsResolver() |
ObjectMap |
getGraphContext()
Name/value pairs that are available to all serializers and are cleared after each object graph is serialized or
deserialized.
|
org.objenesis.strategy.InstantiatorStrategy |
getInstantiatorStrategy() |
int |
getNextRegistrationId()
Returns the lowest, next available integer ID.
|
IdentityMap |
getOriginalToCopyMap()
Returns the internal map of original to copy objects when a copy method is used.
|
ReferenceResolver |
getReferenceResolver() |
boolean |
getReferences() |
Registration |
getRegistration(Class type)
If the class is not registered and
setRegistrationRequired(boolean) is false, it is automatically registered
using the default serializer . |
Registration |
getRegistration(int classID) |
Serializer |
getSerializer(Class type)
Returns the serializer for the registration for the specified class.
|
StreamFactory |
getStreamFactory() |
TaggedFieldSerializerConfig |
getTaggedFieldSerializerConfig() |
protected boolean |
isClosure(Class type)
Returns true if the specified type is a closure.
|
boolean |
isFinal(Class type)
Returns true if the specified type is final.
|
boolean |
isRegistrationRequired() |
boolean |
isWarnUnregisteredClasses() |
protected Serializer |
newDefaultSerializer(Class type)
Called by
getDefaultSerializer(Class) when no default serializers matched the type. |
<T> T |
newInstance(Class<T> type)
Creates a new instance of a class using
Registration.getInstantiator() . |
protected org.objenesis.instantiator.ObjectInstantiator |
newInstantiator(Class type)
Returns a new instantiator for creating new instances of the specified type.
|
Registration |
readClass(Input input)
Reads a class and returns its registration.
|
Object |
readClassAndObject(Input input)
Reads the class and object or null using the registered serializer.
|
<T> T |
readObject(Input input,
Class<T> type)
Reads an object using the registered serializer.
|
<T> T |
readObject(Input input,
Class<T> type,
Serializer serializer)
Reads an object using the specified serializer.
|
<T> T |
readObjectOrNull(Input input,
Class<T> type)
Reads an object or null using the registered serializer.
|
<T> T |
readObjectOrNull(Input input,
Class<T> type,
Serializer serializer)
Reads an object or null using the specified serializer.
|
void |
reference(Object object)
Called by
Serializer.read(Kryo, Input, Class) and Serializer.copy(Kryo, Object) before Kryo can be used to
deserialize or copy child objects. |
Registration |
register(Class type)
Registers the class using the lowest, next available integer ID and the
default
serializer . |
Registration |
register(Class type,
int id)
Registers the class using the specified ID and the
default serializer . |
Registration |
register(Class type,
Serializer serializer)
Registers the class using the lowest, next available integer ID and the specified serializer.
|
Registration |
register(Class type,
Serializer serializer,
int id)
Registers the class using the specified ID and serializer.
|
Registration |
register(Registration registration)
Stores the specified registration.
|
void |
reset()
Resets unregistered class names, references to previously serialized or deserialized objects, and the
graph context . |
void |
setAsmEnabled(boolean flag)
Deprecated.
Use
getFieldSerializerConfig() to change the default FieldSerializer configuration. |
void |
setAutoReset(boolean autoReset)
If true (the default),
reset() is called automatically after an entire object graph has been read or written. |
void |
setClassLoader(ClassLoader classLoader)
Sets the classloader to resolve unregistered class names to classes.
|
void |
setCopyReferences(boolean copyReferences)
If true, when
copy(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. |
void |
setDefaultSerializer(Class<? extends Serializer> serializer)
Sets the serializer to use when no
default serializers match an object's type. |
void |
setDefaultSerializer(SerializerFactory serializer)
Sets the serializer factory to use when no
default serializers match an
object's type. |
void |
setInstantiatorStrategy(org.objenesis.strategy.InstantiatorStrategy strategy)
Sets the strategy used by
newInstantiator(Class) for creating objects. |
void |
setMaxDepth(int maxDepth)
Sets the maxiumum depth of an object graph.
|
void |
setReferenceResolver(ReferenceResolver referenceResolver)
Sets the reference resolver and enables references.
|
boolean |
setReferences(boolean references)
If true, each appearance of an object in the graph after the first is stored as an integer ordinal.
|
void |
setRegistrationRequired(boolean registrationRequired)
If true, an exception is thrown when an unregistered class is encountered.
|
void |
setStreamFactory(StreamFactory streamFactory) |
void |
setWarnUnregisteredClasses(boolean warnUnregisteredClasses)
If true, kryo writes a warn log telling about the classes unregistered.
|
protected String |
unregisteredClassMessage(Class type) |
Registration |
writeClass(Output output,
Class type)
Writes a class and returns its registration.
|
void |
writeClassAndObject(Output output,
Object object)
Writes the class and object or null using the registered serializer.
|
void |
writeObject(Output output,
Object object)
Writes an object using the registered serializer.
|
void |
writeObject(Output output,
Object object,
Serializer serializer)
Writes an object using the specified serializer.
|
void |
writeObjectOrNull(Output output,
Object object,
Class type)
Writes an object or null using the registered serializer for the specified type.
|
void |
writeObjectOrNull(Output output,
Object object,
Serializer serializer)
Writes an object or null using the specified serializer.
|
public static final byte NULL
public static final byte NOT_NULL
public Kryo()
DefaultClassResolver
and a MapReferenceResolver
.public Kryo(ReferenceResolver referenceResolver)
DefaultClassResolver
.referenceResolver
- May be null to disable references.public Kryo(ClassResolver classResolver, ReferenceResolver referenceResolver)
referenceResolver
- May be null to disable references.public Kryo(ClassResolver classResolver, ReferenceResolver referenceResolver, StreamFactory streamFactory)
referenceResolver
- May be null to disable references.public void setDefaultSerializer(SerializerFactory serializer)
default serializers
match an
object's type. Default is ReflectionSerializerFactory
with FieldSerializer
.newDefaultSerializer(Class)
public void setDefaultSerializer(Class<? extends Serializer> serializer)
default serializers
match an object's type.
Default is FieldSerializer
.newDefaultSerializer(Class)
public void addDefaultSerializer(Class type, Serializer serializer)
register(Class)
or
register(Class, int)
are called.setDefaultSerializer(Class)
public void addDefaultSerializer(Class type, SerializerFactory serializerFactory)
register(Class)
or
register(Class, int)
are called.setDefaultSerializer(Class)
public void addDefaultSerializer(Class type, Class<? extends Serializer> serializerClass)
register(Class)
or
register(Class, int)
are called. Serializer instances are created as needed via
ReflectionSerializerFactory.makeSerializer(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.
public Serializer getDefaultSerializer(Class type)
protected Serializer getDefaultSerializerForAnnotatedType(Class type)
protected Serializer newDefaultSerializer(Class type)
getDefaultSerializer(Class)
when no default serializers matched the type. Subclasses can override this
method to customize behavior. The default implementation calls SerializerFactory.makeSerializer(Kryo, Class)
using
the default serializer
.public Registration register(Class type)
default
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.
public Registration register(Class type, int id)
default 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.
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.public Registration register(Class type, Serializer serializer)
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.
public Registration register(Class type, Serializer serializer, int id)
IDs must be the same at deserialization as they were for serialization.
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.public Registration register(Registration registration)
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)
.
public int getNextRegistrationId()
public Registration getRegistration(Class type)
setRegistrationRequired(boolean)
is false, it is automatically registered
using the default serializer
.IllegalArgumentException
- if the class is not registered and setRegistrationRequired(boolean)
is true.ClassResolver.getRegistration(Class)
public Registration getRegistration(int classID)
ClassResolver.getRegistration(int)
public Serializer getSerializer(Class type)
public Registration writeClass(Output output, Class type)
type
- May be null.ClassResolver.writeClass(Output, Class)
public void writeObject(Output output, Object object)
public void writeObject(Output output, Object object, Serializer serializer)
public void writeObjectOrNull(Output output, Object object, Class type)
object
- May be null.public void writeObjectOrNull(Output output, Object object, Serializer serializer)
object
- May be null.public void writeClassAndObject(Output output, Object object)
object
- May be null.public Registration readClass(Input input)
ClassResolver.readClass(Input)
public <T> T readObject(Input input, Class<T> type)
public <T> T readObject(Input input, Class<T> type, Serializer serializer)
public <T> T readObjectOrNull(Input input, Class<T> type)
public <T> T readObjectOrNull(Input input, Class<T> type, Serializer serializer)
public Object readClassAndObject(Input input)
public void reference(Object object)
Serializer.read(Kryo, Input, Class)
and Serializer.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.object
- May be null, unless calling this method from Serializer.copy(Kryo, Object)
.public void reset()
graph context
. If auto reset
is true, this method is called
automatically when an object graph has been completely serialized or deserialized. If overridden, the super method must be
called.public <T> T copy(T object)
Serializer.copy(Kryo, Object)
.object
- May be null.public <T> T copy(T object, Serializer serializer)
Serializer.copy(Kryo, Object)
.object
- May be null.public <T> T copyShallow(T object)
Serializer.copy(Kryo, Object)
.object
- May be null.public <T> T copyShallow(T object, Serializer serializer)
Serializer.copy(Kryo, Object)
.object
- May be null.public ClassResolver getClassResolver()
public ReferenceResolver getReferenceResolver()
public void setClassLoader(ClassLoader classLoader)
public ClassLoader getClassLoader()
public void setRegistrationRequired(boolean registrationRequired)
If false, when an unregistered class is encountered, its fully qualified class name will be serialized and the
default serializer
for 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.
public boolean isRegistrationRequired()
public void setWarnUnregisteredClasses(boolean warnUnregisteredClasses)
If false, no log are written when unregistered classes are encountered.
public boolean isWarnUnregisteredClasses()
public boolean setReferences(boolean references)
MapReferenceResolver
is 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.public void setCopyReferences(boolean copyReferences)
copy(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.public FieldSerializerConfig getFieldSerializerConfig()
FieldSerializer
instances. Already existing serializer instances (e.g. implicitely
created for already registered classes) are not affected by this configuration. You can override the configuration for a
single FieldSerializer
.public TaggedFieldSerializerConfig getTaggedFieldSerializerConfig()
public void setReferenceResolver(ReferenceResolver referenceResolver)
public boolean getReferences()
public void setInstantiatorStrategy(org.objenesis.strategy.InstantiatorStrategy strategy)
newInstantiator(Class)
for creating objects. See StdInstantiatorStrategy
to
create objects via without calling any constructor. See SerializingInstantiatorStrategy
to mimic Java's built-in
serialization.strategy
- May be null.public org.objenesis.strategy.InstantiatorStrategy getInstantiatorStrategy()
protected org.objenesis.instantiator.ObjectInstantiator newInstantiator(Class type)
strategy
is set, it will be used instead of throwing an exception.public <T> T newInstance(Class<T> type)
Registration.getInstantiator()
. If the registration's instantiator is null,
a new one is set using newInstantiator(Class)
.public ObjectMap getContext()
public ObjectMap getGraphContext()
public int getDepth()
public IdentityMap getOriginalToCopyMap()
reset()
so this is only useful when
setAutoReset(boolean)
is false.public void setAutoReset(boolean autoReset)
public void setMaxDepth(int maxDepth)
Integer.MAX_VALUE
.public boolean isFinal(Class type)
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.
protected boolean isClosure(Class type)
This can be overridden to support alternative implementations of clousres. Current version supports Oracle's Java8 only
public GenericsResolver getGenericsResolver()
public StreamFactory getStreamFactory()
public void setStreamFactory(StreamFactory streamFactory)
@Deprecated public void setAsmEnabled(boolean flag)
getFieldSerializerConfig()
to change the default FieldSerializer
configuration.By default, Kryo uses ASM-based backend.
flag
- if true, ASM-based backend will be used. Otherwise Unsafe-based backend could be used by some serializers, e.g.
FieldSerializer@Deprecated public boolean getAsmEnabled()
getFieldSerializerConfig()
to change the default FieldSerializer
configuration.Copyright © 2018. All rights reserved.