1 package org.djutils.serialization.serializers;
2
3 import org.djunits.unit.Unit;
4 import org.djutils.serialization.DisplayType;
5 import org.djutils.serialization.EndianUtil;
6 import org.djutils.serialization.SerializationUnits;
7
8
9
10
11
12
13
14
15
16
17
18 public abstract class ObjectWithUnitSerializer<U extends Unit<U>, T> extends ObjectSerializer<T>
19 {
20
21
22
23
24
25 public ObjectWithUnitSerializer(final byte type, final String dataClassName)
26 {
27 super(type, dataClassName);
28 }
29
30
31
32
33
34
35
36
37 protected void encodeUnit(final U unit, final byte[] message, final Pointer pointer, final EndianUtil endianUtil)
38 {
39 SerializationUnits unitType = SerializationUnits.getUnitType(unit);
40 message[pointer.getAndIncrement(1)] = unitType.getCode();
41 DisplayType displayType = DisplayType.getDisplayType(unit);
42 message[pointer.getAndIncrement(1)] = displayType.getByteCode();
43 }
44
45
46
47
48
49
50
51
52 @SuppressWarnings("unchecked")
53 protected U getUnit(final byte[] buffer, final Pointer pointer, final EndianUtil endianUtil)
54 {
55 SerializationUnits unitType = SerializationUnits.getUnitType(buffer[pointer.getAndIncrement(1)]);
56 DisplayType displayType = DisplayType.getDisplayType(unitType, 0 + buffer[pointer.getAndIncrement(1)]);
57 return (U) displayType.getDjunitsType();
58 }
59
60 @Override
61 public boolean hasUnit()
62 {
63 return true;
64 }
65
66 }