package org.djutils.serialization.serializers; import org.djutils.serialization.EndianUtil; /** * Serializer for arrays or matrices. * @param type; with [] or [][] * @param type without [] or [][] */ public abstract class ArrayOrMatrixSerializer extends BasicSerializer { /** Size of one element of the encoded data. */ private final int elementSize; /** Number of dimension; 1 for array, 2 for matrix. */ private final int numberOfDimensions; /** * Construct a new ArrayOrMatrixSerializere. * @param type byte; the field type (returned by the fieldType method) * @param elementSize int; the number of bytes needed to encode one additional array, or matrix element * @param dataClassName String; returned by the dataClassName method * @param numberOfDimensions int; should be 1 for array serializer and 2 for matrix serializer */ ArrayOrMatrixSerializer(final byte type, final int elementSize, final String dataClassName, final int numberOfDimensions) { super(type, dataClassName); this.elementSize = elementSize; this.numberOfDimensions = numberOfDimensions; } /** * Return the number of bytes needed to encode one additional element. * @return int; the number of bytes needed to encode one additional element */ public final int getElementSize() { return this.elementSize; } /** * Return the number of dimensions of the stored data. * @return int; 1 for array, 2 for matrix */ @Override public final int getNumberOfDimensions() { return this.numberOfDimensions; } /** * Serializer for one array or matrix element (without type prefix) must be implemented in implementing sub classes. * @param object E; the object to serialize * @param buffer byte[]; the byte buffer for the serialized object * @param offset int; index in byte buffer where first serialized byte must be stored * @param endianUtil EndianUtil; selects bigEndian or littleEndian encoding */ public abstract void serializeElement(E object, byte[] buffer, int offset, EndianUtil endianUtil); /** * Deserializer for one array or matrix element (without type prefix) must be implemented in implementing sub classes. * @param buffer byte[]; the byte buffer from which the object is to be deserialized * @param offset int; index in byte buffer where first byte of the object is stored * @param endianUtil EndianUtil; selects bigEndian or littleEndian encoding * @return E; the deserialized object */ public abstract E deSerializeElement(byte[] buffer, int offset, EndianUtil endianUtil); }