1 package org.djutils.serialization;
2
3 import org.djutils.exceptions.Throw;
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class ItemName implements Serializer<String>
18 {
19
20 private String string;
21
22
23
24
25
26
27 public ItemName(final String string) throws SerializationException
28 {
29 Throw.when(string.length() > 255, SerializationException.class, "ItemName may not be longer than 255 characters");
30 for (int i = 0; i < string.length(); i++)
31 {
32 Throw.when(string.charAt(i) > 255, SerializationException.class, "Character at position %d is out of range", i);
33 }
34 this.string = string;
35 }
36
37
38
39
40
41
42 public ItemName(final byte[] buffer, final Pointer pointer)
43 {
44 deSerialize(buffer, pointer, null);
45 }
46
47
48 @Override
49 public int size(final String object) throws SerializationException
50 {
51 return 1 + this.string.length();
52 }
53
54
55 @Override
56 public int sizeWithPrefix(final String object) throws SerializationException
57 {
58 return 1 + size(object);
59 }
60
61
62 @Override
63 public byte fieldType()
64 {
65 return 33;
66 }
67
68
69 @Override
70 public void serialize(final String object, final byte[] buffer, final Pointer pointer, final EndianUtil endianUtil)
71 throws SerializationException
72 {
73 buffer[pointer.getAndIncrement(1)] = (byte) this.string.length();
74 for (int i = 0; i < this.string.length(); i++)
75 {
76 buffer[pointer.getAndIncrement(1)] = (byte) (this.string.charAt(i) & 0xff);
77 }
78 }
79
80
81 @Override
82 public void serializeWithPrefix(final String object, final byte[] buffer, final Pointer pointer,
83 final EndianUtil endianUtil) throws SerializationException
84 {
85 buffer[pointer.getAndIncrement(1)] = fieldType();
86 serialize(object, buffer, pointer, endianUtil);
87 }
88
89
90 @Override
91 public String deSerialize(final byte[] buffer, final Pointer pointer, final EndianUtil endianUtil)
92 {
93 int length = buffer[pointer.getAndIncrement(1)] & 0xff;
94 char[] chars = new char[length];
95 for (int i = 0; i < length; i++)
96 {
97 chars[i] = (char) (buffer[pointer.getAndIncrement(1)] & 0xff);
98 }
99 this.string = new String(chars);
100 return this.string;
101 }
102
103
104 @Override
105 public String dataClassName()
106 {
107 return "Name";
108 }
109
110 @Override
111 public final int getNumberOfDimensions()
112 {
113 return 0;
114 }
115
116 }