1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.directory.api.util;
20
21
22
23
24
25
26
27 public final class Serialize
28 {
29
30 public static final byte TRUE = 0x01;
31
32
33 public static final byte FALSE = 0x00;
34
35
36 private Serialize()
37 {
38 }
39
40
41
42
43
44
45
46
47
48
49 public static int serialize( int value, byte[] buffer, int pos )
50 {
51 if ( buffer.length - pos < 4 )
52 {
53 throw new ArrayIndexOutOfBoundsException();
54 }
55
56 buffer[pos++] = ( byte ) ( ( value >>> 24 ) & 0xFF );
57 buffer[pos++] = ( byte ) ( ( value >>> 16 ) & 0xFF );
58 buffer[pos++] = ( byte ) ( ( value >>> 8 ) & 0xFF );
59 buffer[pos++] = ( byte ) ( ( value >>> 0 ) & 0xFF );
60
61 return pos;
62 }
63
64
65
66
67
68
69
70
71
72
73 public static int serialize( byte[] value, byte[] buffer, int pos )
74 {
75 if ( buffer.length - pos < 4 + value.length )
76 {
77 throw new ArrayIndexOutOfBoundsException();
78 }
79
80 buffer[pos++] = ( byte ) ( ( value.length >>> 24 ) & 0xFF );
81 buffer[pos++] = ( byte ) ( ( value.length >>> 16 ) & 0xFF );
82 buffer[pos++] = ( byte ) ( ( value.length >>> 8 ) & 0xFF );
83 buffer[pos++] = ( byte ) ( ( value.length >>> 0 ) & 0xFF );
84
85 System.arraycopy( value, 0, buffer, pos, value.length );
86
87 return pos + value.length;
88 }
89
90
91
92
93
94
95
96
97
98 public static int deserializeInt( byte[] buffer, int pos )
99 {
100 if ( buffer.length - pos < 4 )
101 {
102 throw new ArrayIndexOutOfBoundsException();
103 }
104
105 return ( buffer[pos] << 24 ) + ( buffer[pos + 1] << 16 ) + ( buffer[pos + 2] << 8 ) + ( buffer[pos + 3] << 0 );
106 }
107
108
109
110
111
112
113
114
115
116 public static byte[] deserializeBytes( byte[] buffer, int pos )
117 {
118 if ( buffer.length - pos < 4 )
119 {
120 throw new ArrayIndexOutOfBoundsException();
121 }
122
123 int len = deserializeInt( buffer, pos );
124 pos += 4;
125
126 if ( len > 0 )
127 {
128 if ( buffer.length - pos < len )
129 {
130 throw new ArrayIndexOutOfBoundsException();
131 }
132
133 byte[] result = new byte[len];
134
135 System.arraycopy( buffer, pos, result, 0, len );
136
137 return result;
138 }
139 else
140 {
141 return Strings.EMPTY_BYTES;
142 }
143 }
144
145
146
147
148
149
150
151
152
153 public static boolean deserializeBoolean( byte[] buffer, int pos )
154 {
155 if ( buffer.length - pos < 1 )
156 {
157 throw new ArrayIndexOutOfBoundsException();
158 }
159
160 byte value = buffer[pos];
161
162 return ( value != 0x00 );
163 }
164 }