Class DataClassSerializer
java.lang.Object
eu.cloudnetservice.driver.network.rpc.defaults.object.data.DataClassSerializer
- All Implemented Interfaces:
ObjectSerializer<Object>
A serializer for all data classes and arrays which have no special serializer available.
- Since:
- 4.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final com.github.benmanes.caffeine.cache.Cache<Class<?>, eu.cloudnetservice.common.tuple.Tuple2<DataClassCodec, AllocationStatistic>> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate @NonNull DataClassCodeccreateDataClassCodec(@NonNull Class<?> targetType) Generates the data class codec for the given target type.private static voidensureClassIsInstantiable(@NonNull Class<?> clazz) Validates that an instance of the given class can be constructed in runtime.Reads the object from the buffer.voidwrite(DataBuf.Mutable dataBuf, @NonNull Object object, @NonNull Type type, @NonNull ObjectMapper caller) Writes the given object into the given buffer for network transfer and later deserialization.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface eu.cloudnetservice.driver.network.rpc.object.ObjectSerializer
preReadCheckAccepts, preWriteCheckAccepts
-
Field Details
-
dataClassCodecCache
private final com.github.benmanes.caffeine.cache.Cache<Class<?>,eu.cloudnetservice.common.tuple.Tuple2<DataClassCodec, dataClassCodecCacheAllocationStatistic>>
-
-
Constructor Details
-
DataClassSerializer
public DataClassSerializer()
-
-
Method Details
-
ensureClassIsInstantiable
Validates that an instance of the given class can be constructed in runtime. This means that the class is not abstract, an interface and does not represent a primitive type.- Parameters:
clazz- the class to check.- Throws:
IllegalArgumentException- if the given class is not instantiable.NullPointerException- if the given class is null.
-
read
@NonNull public @NonNull Object read(@NonNull @NonNull DataBuf source, @NonNull @NonNull Type type, @NonNull @NonNull ObjectMapper caller) Reads the object from the buffer. This method should only read the content from the buffer which was written to it previously, never more as the given buffer is not a slice of the buffer representing the object being read. Although this method returns an object, the returned object must always match the given type during object construction. The object return type is just a helper, but the return value will be cast to the given type resulting in errors if provided with the wrong type of object.- Specified by:
readin interfaceObjectSerializer<Object>- Parameters:
source- the buffer to read the object from.type- the type of the object to read.caller- the mapper to which this serializer is registered and from which the deserialize request call came.- Returns:
- the deserialized object of the serializer type T, or null if not readable.
-
write
public void write(@NonNull DataBuf.Mutable dataBuf, @NonNull @NonNull Object object, @NonNull @NonNull Type type, @NonNull @NonNull ObjectMapper caller) Writes the given object into the given buffer for network transfer and later deserialization.- Specified by:
writein interfaceObjectSerializer<Object>- Parameters:
dataBuf- the buffer to write the data to.object- the object to serialize.type- the raw type of the object.caller- the object mapper to which this serializer belongs and which requested the serialisation.
-
createDataClassCodec
@NonNull private @NonNull DataClassCodec createDataClassCodec(@NonNull @NonNull Class<?> targetType) Generates the data class codec for the given target type. The result of the method is cached, and should not be called directly due to some heavy work that is required to construct the data class codec.- Parameters:
targetType- the target type to construct the data class codec for.- Returns:
- the generated data class codec for the given target type.
- Throws:
IllegalStateException- if the given target type is missing an all-args constructor.NullPointerException- if the given target type is null.
-