View Javadoc
1   package org.djutils.serialization.serializers;
2   
3   import org.djutils.serialization.EndianUtil;
4   import org.djutils.serialization.SerializationException;
5   
6   /**
7    * Serializer for primitive data array classes. *
8    * <p>
9    * Copyright (c) 2019-2021 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10   * BSD-style license. See <a href="https://djutils.org/docs/current/djutils/licenses.html">DJUTILS License</a>.
11   * <p>
12   * @version $Revision$, $LastChangedDate$, by $Author$, <br>
13   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
14   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
15   * @param <T> array type, e.g. int[]
16   */
17  public abstract class BasicPrimitiveArrayOrMatrixSerializer<T extends Object> extends BasicSerializer<T>
18  {
19      /** Size of one element of the encoded data. */
20      private final int elementSize;
21  
22      /** Number of dimensions of the data. */
23      private final int numberOfDimensions;
24  
25      /**
26       * Construct a new BasicPrimitiveArrayOrMatrixSerializer.
27       * @param type byte; the field type (returned by the <code>fieldType</code> method)
28       * @param elementSize int; the number of bytes needed to encode one additional array element
29       * @param dataClassName String; returned by the dataClassName method
30       * @param numberOfDimensions int; number of dimensions (1 for array, 2 for matrix)
31       */
32      public BasicPrimitiveArrayOrMatrixSerializer(final byte type, final int elementSize, final String dataClassName,
33              final int numberOfDimensions)
34      {
35          super(type, dataClassName);
36          this.elementSize = elementSize;
37          this.numberOfDimensions = numberOfDimensions;
38      }
39  
40      @Override
41      public final int sizeWithPrefix(final T object) throws SerializationException
42      {
43          return 1 + size(object);
44      }
45  
46      @Override
47      public final void serializeWithPrefix(final T object, final byte[] buffer, final Pointer pointer,
48              final EndianUtil endianUtil) throws SerializationException
49      {
50          buffer[pointer.getAndIncrement(1)] = fieldType();
51          serialize(object, buffer, pointer, endianUtil);
52      }
53  
54      /**
55       * Retrieve the number of bytes needed to encode one additional array element.
56       * @return int; the number of bytes needed to encode one additional array element
57       */
58      public final int getElementSize()
59      {
60          return this.elementSize;
61      }
62  
63      @Override
64      public final int getNumberOfDimensions()
65      {
66          return this.numberOfDimensions;
67      }
68  
69  }