Class TaggedFieldSerializer<T>
- All Implemented Interfaces:
Comparator<FieldSerializer.CachedField>
@Tag(int) annotation. This provides
backward compatibility so new fields can be added. TaggedFieldSerializer has two advantages over VersionFieldSerializer
: 1) fields can be renamed and 2) fields marked with the @Deprecated annotation will be ignored when reading old
bytes and won't be written to new bytes. Deprecation effectively removes the field from serialization, though the field and
@Tag annotation must remain in the class. Deprecated fields can optionally be made private and/or renamed so they
don't clutter the class (eg, ignored, ignored2). For these reasons, TaggedFieldSerializer generally
provides more flexibility for classes to evolve. The downside is that it has a small amount of additional overhead compared to
VersionFieldSerializer (an additional varint per field).
Forward compatibility is optionally supported by enabling TaggedFieldSerializerConfig.setSkipUnknownTags(boolean),
which allows it to skip reading unknown tagged fields, which are presumably new fields added in future versions of an
application. The data is only forward compatible if the newly added fields are tagged with
TaggedFieldSerializer.Tag.annexed() set true, which comes with the cost of chunked encoding. When annexed fields are
encountered during the read or write process of an object, a buffer is allocated to perform the chunked encoding.
Tag values must be entirely unique, even among a class and its superclass(es). An IllegalArgumentException will be thrown by
Kryo.register(Class) (and its overloads) if duplicate Tag values are encountered.
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic @interfaceMarks a field for serialization.Nested classes/interfaces inherited from class FieldSerializer
FieldSerializer.Bind, FieldSerializer.CachedField<X>, FieldSerializer.CachedFieldFactory, FieldSerializer.CachedFieldNameStrategy, FieldSerializer.Optional -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean[]private boolean[]private static final Comparator<FieldSerializer.CachedField> private int[]private intFields inherited from class FieldSerializer
access, asmFieldFactory, componentType, config, kryo, objectFieldFactory, removedFields, type, typeParameters -
Constructor Summary
ConstructorsConstructorDescriptionTaggedFieldSerializer(Kryo kryo, Class type) TaggedFieldSerializer(Kryo kryo, Class type, TaggedFieldSerializerConfig config) -
Method Summary
Modifier and TypeMethodDescriptionprotected voidReads bytes and returns a new object of the specified concrete type.voidRemoves a field so that it won't be serialized.voidremoveField(String fieldName) Removes a field so that it won't be serialized.voidThis method can be called for different fields having the same type.Methods inherited from class FieldSerializer
compare, copy, create, createCopy, getCachedFieldName, getConfig, getCopyTransient, getField, getFields, getGenerics, getGenericsScope, getKryo, getSerializeTransient, getTransientFields, getType, newCachedField, newMatchingCachedField, rebuildCachedFields, rebuildCachedFields, setCopyTransient, setFieldsAsAccessible, setFieldsCanBeNull, setFixedFieldTypes, setGenerics, setIgnoreSyntheticFields, setOptimizedGenerics, setSerializeTransientMethods inherited from class Serializer
getAcceptsNull, isImmutable, setAcceptsNull, setImmutableMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Comparator
equals, reversed, thenComparing, thenComparing, thenComparing, thenComparingDouble, thenComparingInt, thenComparingLong
-
Field Details
-
tags
private int[] tags -
writeFieldCount
private int writeFieldCount -
deprecated
private boolean[] deprecated -
annexed
private boolean[] annexed -
TAGGED_VALUE_COMPARATOR
-
-
Constructor Details
-
TaggedFieldSerializer
-
TaggedFieldSerializer
-
-
Method Details
-
initializeCachedFields
protected void initializeCachedFields()- Overrides:
initializeCachedFieldsin classFieldSerializer<T, TaggedFieldSerializerConfig>
-
removeField
Description copied from class:FieldSerializerRemoves a field so that it won't be serialized.- Overrides:
removeFieldin classFieldSerializer<T, TaggedFieldSerializerConfig>
-
removeField
Description copied from class:FieldSerializerRemoves a field so that it won't be serialized.- Overrides:
removeFieldin classFieldSerializer<T, TaggedFieldSerializerConfig>
-
write
Description copied from class:FieldSerializerThis 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.- Overrides:
writein classFieldSerializer<T, TaggedFieldSerializerConfig>- Parameters:
object- May be null ifSerializer.getAcceptsNull()is true.
-
read
Description copied from class:SerializerReads 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 usesKryoto read a child object may need to be reentrant.This method should not be called directly, instead this serializer can be passed to
Kryoread methods that accept a serialier.- Overrides:
readin classFieldSerializer<T, TaggedFieldSerializerConfig>- Returns:
- May be null if
Serializer.getAcceptsNull()is true.
-