Class FieldSerializer<T,C extends FieldSerializerConfig>
- All Implemented Interfaces:
Comparator<FieldSerializer.CachedField>
- Direct Known Subclasses:
CompatibleFieldSerializer
,TaggedFieldSerializer
,VersionFieldSerializer
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic @interface
Used to annotate fields with a specific Kryo serializer.static class
Controls how a field will be serialized.static interface
static interface
static @interface
Indicates a field should be ignored when its declaring class is registered unless thecontext
has a value set for the specified key. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) Object
private FieldSerializerAnnotationsUtil
(package private) static FieldSerializer.CachedFieldFactory
(package private) final Class
protected final C
private FieldSerializer.CachedField[]
private Class[]
Concrete classes passed as values for type variablesprivate Generics
private FieldSerializerGenericsUtil
private boolean
(package private) final Kryo
(package private) static FieldSerializer.CachedFieldFactory
protected HashSet
<FieldSerializer.CachedField> private FieldSerializer.CachedField[]
(package private) final Class
(package private) final TypeVariable[]
type variables declared for this typeprivate boolean
If set, this serializer tries to use a variable length encoding for int and long fields -
Constructor Summary
ConstructorsConstructorDescriptionFieldSerializer
(Kryo kryo, Class type) FieldSerializer
(Kryo kryo, Class type, Class[] generics) FieldSerializer
(Kryo kryo, Class type, Class[] generics, C config) -
Method Summary
Modifier and TypeMethodDescriptionbuildValidFields
(boolean transientFields, List<Field> allFields, ObjectMap context, IntArray useAsm) buildValidFieldsFromCachedFields
(FieldSerializer.CachedField[] cachedFields, IntArray useAsm) int
Returns a copy of the specified object.protected T
Used byread(Kryo, Input, Class)
to create the new object.private void
createCachedFields
(IntArray useAsm, List<Field> validFields, List<FieldSerializer.CachedField> cachedFields, int baseIndex) protected T
createCopy
(Kryo kryo, T original) Used bycopy(Kryo, Object)
to create the new object.protected String
getCachedFieldName
(FieldSerializer.CachedField cachedField) boolean
Allows specific fields to be optimized.Get all fields controlled by this FieldSerializerClass[]
Get generic type parameters of the class controlled by this serializer.(package private) final Generics
getKryo()
boolean
Get all transient fields controlled by this FieldSerializergetType()
protected void
(package private) FieldSerializer.CachedField
newCachedField
(Field field, int fieldIndex, int accessIndex) (package private) FieldSerializer.CachedField
newMatchingCachedField
(Field field, int accessIndex, Class fieldClass, Type fieldGenericType, Class[] fieldGenerics) Reads bytes and returns a new object of the specified concrete type.protected void
Called when the list of cached fields must be rebuilt.protected void
rebuildCachedFields
(boolean minorRebuild) Rebuilds the list of cached fields.void
removeField
(FieldSerializer.CachedField removeField) Removes a field so that it won't be serialized.void
removeField
(String fieldName) Removes a field so that it won't be serialized.void
setCopyTransient
(boolean setCopyTransient) void
setFieldsAsAccessible
(boolean setFieldsAsAccessible) Controls which fields are serialized.void
setFieldsCanBeNull
(boolean fieldsCanBeNull) Sets the default value forFieldSerializer.CachedField.setCanBeNull(boolean)
.void
setFixedFieldTypes
(boolean fixedFieldTypes) Sets the default value forFieldSerializer.CachedField.setClass(Class)
to the field's declared type.void
setGenerics
(Kryo kryo, Class[] generics) Sets the generic types of the field or method this serializer will be used for on the next call to read or write.void
setIgnoreSyntheticFields
(boolean ignoreSyntheticFields) Controls if synthetic fields are serialized.void
setOptimizedGenerics
(boolean setOptimizedGenerics) Controls if the serialization of generics should be optimized for smaller size.void
setSerializeTransient
(boolean setSerializeTransient) void
This method can be called for different fields having the same type.Methods inherited from class com.esotericsoftware.kryo.Serializer
getAcceptsNull, isImmutable, setAcceptsNull, setImmutable
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.util.Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
kryo
-
type
-
typeParameters
type variables declared for this type -
componentType
-
config
-
fields
-
transientFields
-
removedFields
-
access
Object access -
genericsUtil
-
annotationsUtil
-
generics
Concrete classes passed as values for type variables -
genericsScope
-
varIntsEnabled
private boolean varIntsEnabledIf set, this serializer tries to use a variable length encoding for int and long fields -
hasObjectFields
private boolean hasObjectFields -
asmFieldFactory
-
objectFieldFactory
-
-
Constructor Details
-
FieldSerializer
-
FieldSerializer
-
FieldSerializer
-
-
Method Details
-
rebuildCachedFields
protected void rebuildCachedFields()Called when the list of cached fields must be rebuilt. This is done any time settings are changed that affect which fields will be used. It is called from the constructor for FieldSerializer, but not for subclasses. Subclasses must call this from their constructor. -
rebuildCachedFields
protected void rebuildCachedFields(boolean minorRebuild) Rebuilds the list of cached fields.- Parameters:
minorRebuild
- if set, processing due to changes in generic type parameters will be optimized
-
buildValidFieldsFromCachedFields
private List<Field> buildValidFieldsFromCachedFields(FieldSerializer.CachedField[] cachedFields, IntArray useAsm) -
buildValidFields
-
createCachedFields
private void createCachedFields(IntArray useAsm, List<Field> validFields, List<FieldSerializer.CachedField> cachedFields, int baseIndex) -
setGenerics
Description copied from class:Serializer
Sets the generic types of the field or method this serializer will be used for on the next call to read or write. Subsequent calls to read and write must not use this generic type information. The default implementation does nothing. Subclasses may use the information provided to this method for more efficient serialization, eg to use the same type for all items in a list.- Overrides:
setGenerics
in classSerializer<T>
- Parameters:
generics
- Some (but never all) elements may be null if there is no generic type information at that index.
-
getGenerics
Get generic type parameters of the class controlled by this serializer.- Returns:
- generic type parameters or null, if there are none.
-
initializeCachedFields
protected void initializeCachedFields() -
newCachedField
-
newMatchingCachedField
FieldSerializer.CachedField newMatchingCachedField(Field field, int accessIndex, Class fieldClass, Type fieldGenericType, Class[] fieldGenerics) -
getAsmFieldFactory
-
getObjectFieldFactory
-
compare
- Specified by:
compare
in interfaceComparator<T>
-
setFieldsCanBeNull
public void setFieldsCanBeNull(boolean fieldsCanBeNull) Sets the default value forFieldSerializer.CachedField.setCanBeNull(boolean)
. Calling this method resets thecached fields
.- Parameters:
fieldsCanBeNull
- False if none of the fields are null. Saves 0-1 byte per field. True if it is not known (default).
-
setFieldsAsAccessible
public void setFieldsAsAccessible(boolean setFieldsAsAccessible) Controls which fields are serialized. Calling this method resets thecached fields
.- Parameters:
setFieldsAsAccessible
- If true, all non-transient fields (inlcuding private fields) will be serialized andset as accessible
if necessary (default). If false, only fields in the public API will be serialized.
-
setIgnoreSyntheticFields
public void setIgnoreSyntheticFields(boolean ignoreSyntheticFields) Controls if synthetic fields are serialized. Default is true. Calling this method resets thecached fields
.- Parameters:
ignoreSyntheticFields
- If true, only non-synthetic fields will be serialized.
-
setFixedFieldTypes
public void setFixedFieldTypes(boolean fixedFieldTypes) Sets the default value forFieldSerializer.CachedField.setClass(Class)
to the field's declared type. This allows FieldSerializer to be more efficient, since it knows field values will not be a subclass of their declared type. Default is false. Calling this method resets thecached fields
. -
setCopyTransient
public void setCopyTransient(boolean setCopyTransient) -
setSerializeTransient
public void setSerializeTransient(boolean setSerializeTransient) -
setOptimizedGenerics
public void setOptimizedGenerics(boolean setOptimizedGenerics) Controls if the serialization of generics should be optimized for smaller size.Important: This setting changes the serialized representation, so that data can be deserialized only with if this setting is the same as it was for serialization.
- Parameters:
setOptimizedGenerics
- If true, the serialization of generics will be optimize for smaller size (default: false)
-
write
This method can be called for different fields having the same type. Even though the raw type is the same, if the type is generic, it could happen that different concrete classes are used to instantiate it. Therefore, in case of different instantiation parameters, the fields analysis should be repeated. TODO: Cache serializer instances generated for a given set of generic parameters. Reuse it later instead of recomputing every time.- Specified by:
write
in classSerializer<T>
- Parameters:
object
- May be null ifSerializer.getAcceptsNull()
is true.
-
read
Description copied from class:Serializer
Reads bytes and returns a new object of the specified concrete type.Before Kryo can be used to read child objects,
Kryo.reference(Object)
must be called with the parent object to ensure it can be referenced by the child objects. Any serializer that usesKryo
to read a child object may need to be reentrant.This method should not be called directly, instead this serializer can be passed to
Kryo
read methods that accept a serialier.- Specified by:
read
in classSerializer<T>
- Returns:
- May be null if
Serializer.getAcceptsNull()
is true.
-
create
Used byread(Kryo, Input, Class)
to create the new object. This can be overridden to customize object creation, eg to call a constructor with arguments. The default implementation usesKryo.newInstance(Class)
. -
getField
Allows specific fields to be optimized. -
getCachedFieldName
-
removeField
Removes a field so that it won't be serialized. -
removeField
Removes a field so that it won't be serialized. -
getFields
Get all fields controlled by this FieldSerializer- Returns:
- all fields controlled by this FieldSerializer
-
getTransientFields
Get all transient fields controlled by this FieldSerializer- Returns:
- all transient fields controlled by this FieldSerializer
-
getType
-
getKryo
-
getCopyTransient
public boolean getCopyTransient() -
getSerializeTransient
public boolean getSerializeTransient() -
createCopy
Used bycopy(Kryo, Object)
to create the new object. This can be overridden to customize object creation, eg to call a constructor with arguments. The default implementation usesKryo.newInstance(Class)
. -
copy
Description copied from class:Serializer
Returns a copy of the specified object. The default implementation returns the original ifSerializer.isImmutable()
is true, else throwsKryoException
. Subclasses should override this method if needed to supportKryo.copy(Object)
.Before Kryo can be used to copy child objects,
Kryo.reference(Object)
must be called with the copy to ensure it can be referenced by the child objects. Any serializer that usesKryo
to copy a child object may need to be reentrant.This method should not be called directly, instead this serializer can be passed to
Kryo
copy methods that accept a serialier.- Overrides:
copy
in classSerializer<T>
-
getGenericsScope
-
getConfig
-