public class Kryo
extends java.lang.Object
Constructor and Description |
---|
Kryo()
Creates a new Kryo with a
DefaultClassResolver and a MapReferenceResolver . |
Kryo(ClassResolver classResolver,
ReferenceResolver referenceResolver) |
Kryo(ReferenceResolver referenceResolver)
Creates a new Kryo with a
DefaultClassResolver . |
Modifier and Type | Method and Description |
---|---|
void |
addDefaultSerializer(java.lang.Class type,
java.lang.Class<? extends Serializer> serializerClass)
Instances of the specified class will use the specified serializer.
|
void |
addDefaultSerializer(java.lang.Class type,
Serializer serializer)
Instances of the specified class will use the specified serializer.
|
<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.
|
java.lang.ClassLoader |
getClassLoader() |
ClassResolver |
getClassResolver() |
ObjectMap |
getContext()
Name/value pairs that are available to all serializers.
|
Serializer |
getDefaultSerializer(java.lang.Class type)
Returns the best matching serializer for a class.
|
int |
getDepth()
Returns the number of child objects away from the object graph root.
|
static java.lang.Class[] |
getGenerics(java.lang.reflect.Type genericType)
Returns the first level of classes or interfaces for a generic type.
|
ObjectMap |
getGraphContext()
Name/value pairs that are available to all serializers and are cleared after each object graph is serialized or
deserialized.
|
int |
getNextRegistrationId()
Returns the lowest, next available integer ID.
|
ReferenceResolver |
getReferenceResolver() |
boolean |
getReferences() |
Registration |
getRegistration(java.lang.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(java.lang.Class type)
Returns the serializer for the registration for the specified class.
|
boolean |
isFinal(java.lang.Class type)
Returns true if the specified type is final.
|
boolean |
isRegistrationRequired() |
<T> T |
newInstance(java.lang.Class<T> type)
Creates a new instance of a class using
Registration.getInstantiator() . |
Serializer |
newSerializer(java.lang.Class<? extends Serializer> serializerClass,
java.lang.Class type)
Creates a new instance of the specified serializer for serializing the specified class.
|
Registration |
readClass(Input input)
Reads a class and returns its registration.
|
java.lang.Object |
readClassAndObject(Input input)
Reads the class and object or null using the registered serializer.
|
<T> T |
readObject(Input input,
java.lang.Class<T> type)
Reads an object using the registered serializer.
|
<T> T |
readObject(Input input,
java.lang.Class<T> type,
Serializer serializer)
Reads an object using the specified serializer.
|
<T> T |
readObjectOrNull(Input input,
java.lang.Class<T> type)
Reads an object or null using the registered serializer.
|
<T> T |
readObjectOrNull(Input input,
java.lang.Class<T> type,
Serializer serializer)
Reads an object or null using the specified serializer.
|
void |
reference(java.lang.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(java.lang.Class type)
Registers the class using the lowest, next available integer ID and the
default
serializer . |
Registration |
register(java.lang.Class type,
int id)
Registers the class using the specified ID and the
default serializer . |
Registration |
register(java.lang.Class type,
Serializer serializer)
Registers the class using the lowest, next available integer ID and the specified serializer.
|
Registration |
register(java.lang.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.
|
void |
setAutoReset(boolean autoReset)
If true (the default),
reset() is called automatically after an entire object graph has been read or written. |
void |
setClassLoader(java.lang.ClassLoader classLoader)
Sets the classloader to resolve unregistered class names to classes.
|
void |
setDefaultSerializer(java.lang.Class<? extends Serializer> serializer)
Sets the serailzer 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.
|
Registration |
writeClass(Output output,
java.lang.Class type)
Writes a class and returns its registration.
|
void |
writeClassAndObject(Output output,
java.lang.Object object)
Writes the class and object or null using the registered serializer.
|
void |
writeObject(Output output,
java.lang.Object object)
Writes an object using the registered serializer.
|
void |
writeObject(Output output,
java.lang.Object object,
Serializer serializer)
Writes an object using the specified serializer.
|
void |
writeObjectOrNull(Output output,
java.lang.Object object,
java.lang.Class type)
Writes an object or null using the registered serializer for the specified type.
|
void |
writeObjectOrNull(Output output,
java.lang.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 void setDefaultSerializer(java.lang.Class<? extends Serializer> serializer)
default serializers
match an object's type.
Default is FieldSerializer
.newDefaultSerializer(Class)
public void addDefaultSerializer(java.lang.Class type, Serializer serializer)
setDefaultSerializer(Class)
public void addDefaultSerializer(java.lang.Class type, java.lang.Class<? extends Serializer> serializerClass)
newSerializer(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(java.lang.Class type)
public Serializer newSerializer(java.lang.Class<? extends Serializer> serializerClass, java.lang.Class type)
public Registration register(java.lang.Class type)
default
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.
public Registration register(java.lang.Class type, int id)
default serializer
. If the ID is
already in use by the same type, the old entry is overwritten. If the ID is already in use by a different type, a
KryoException
is thrown. 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.public Registration register(java.lang.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(java.lang.Class type, Serializer serializer, int id)
KryoException
is thrown. 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.public Registration register(Registration registration)
KryoException
is thrown. 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)
.
public int getNextRegistrationId()
public Registration getRegistration(java.lang.Class type)
setRegistrationRequired(boolean)
is false, it is automatically registered
using the default serializer
.java.lang.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(java.lang.Class type)
public Registration writeClass(Output output, java.lang.Class type)
type
- May be null.ClassResolver.writeClass(Output, Class)
public void writeObject(Output output, java.lang.Object object)
public void writeObject(Output output, java.lang.Object object, Serializer serializer)
public void writeObjectOrNull(Output output, java.lang.Object object, java.lang.Class type)
object
- May be null.public void writeObjectOrNull(Output output, java.lang.Object object, Serializer serializer)
object
- May be null.public void writeClassAndObject(Output output, java.lang.Object object)
object
- May be null.public Registration readClass(Input input)
ClassResolver.readClass(Input)
public <T> T readObject(Input input, java.lang.Class<T> type)
public <T> T readObject(Input input, java.lang.Class<T> type, Serializer serializer)
public <T> T readObjectOrNull(Input input, java.lang.Class<T> type)
public <T> T readObjectOrNull(Input input, java.lang.Class<T> type, Serializer serializer)
public java.lang.Object readClassAndObject(Input input)
public void reference(java.lang.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(java.lang.ClassLoader classLoader)
public java.lang.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 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 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 <T> T newInstance(java.lang.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 void setAutoReset(boolean autoReset)
public void setMaxDepth(int maxDepth)
Integer.MAX_VALUE
.public boolean isFinal(java.lang.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.
public static java.lang.Class[] getGenerics(java.lang.reflect.Type genericType)