eigene TypeSerializer in UniversalSerializer
Posted: Wed Mar 08, 2017 11:48 am
Habe soeben versucht einen den UniversalSerializer zu wrappen um eigene Types zu serialisieren.
Habe zuvor nur kurz mal einen Blick in den UniversalSerializer geworfen und gesehen, dass prinzipiell 256 TypeSerializer Platz haben sollten.
Dann kamen noch Ranges dazu, auch gut, schließlich kann man ja noch spezifizieren.
Für meinen eigenen Serializer aber dann noch Platz zu finden hat sich dann aber dann doch schwierig gestaltet, da anscheinend der StringSerializer ziemlich gierig ist.
Hier mal eine Liste aller Ranges die ich gefunden habe:
0 null
1 byte
2 char
3-4 bool
5-6 float
7-8 double
9-10 short
11-12 int
13-14 long
18-19 date
30-32 bytearray
33-35 intarray
36-38 chararray
39-41 array
42-44 list
45-47 map
48-52 beantype
53-55 boolarray
56-58 floatarray
59-61 doublearray
62-64 shortarray
65-67 longarray
68 object
69 throwable
70 bean
71 enum
72 xmlnode
79-98 bigdecimal
99-255 string
Da wirds dann doch schon ziemlich eng.
Hier also meine Frage: Gibts die Möglichkeit den UniversalSerializer in einer Art aufzublasen, sodass eine Range für kundenspezifische Anpassungen übrig bleibt, die in Zukunft auch von Hersteller Seite nicht angetastet wird?
- Code: Select all
public class ExtendedUniversalSerializer implements ISerializer {
private UniversalSerializer wrappedSerializer;
public ExtendedUniversalSerializer(){
wrappedSerializer = new UniversalSerializer();
wrappedSerializer.registerTypeSerializer(new SQLExceptionSerializer());
}
@Override
public Object read(DataInputStream pIn) throws Exception {
return wrappedSerializer.read(pIn);
}
@Override
public void write(DataOutputStream pOut, Object pObject) throws Exception {
wrappedSerializer.write(pOut, pObject);
}
}
Habe zuvor nur kurz mal einen Blick in den UniversalSerializer geworfen und gesehen, dass prinzipiell 256 TypeSerializer Platz haben sollten.
- Code: Select all
private ITypeSerializer[] deserializerTypes = new ITypeSerializer[256];
Dann kamen noch Ranges dazu, auch gut, schließlich kann man ja noch spezifizieren.
Für meinen eigenen Serializer aber dann noch Platz zu finden hat sich dann aber dann doch schwierig gestaltet, da anscheinend der StringSerializer ziemlich gierig ist.
- Code: Select all
/** min. byte value of <code>String</code> type. */
private static final int TYPE_STRING_MIN = 99;
/** max. byte value of <code>String</code> type. */
private static final int TYPE_STRING_MAX = 255;
Hier mal eine Liste aller Ranges die ich gefunden habe:
0 null
1 byte
2 char
3-4 bool
5-6 float
7-8 double
9-10 short
11-12 int
13-14 long
18-19 date
30-32 bytearray
33-35 intarray
36-38 chararray
39-41 array
42-44 list
45-47 map
48-52 beantype
53-55 boolarray
56-58 floatarray
59-61 doublearray
62-64 shortarray
65-67 longarray
68 object
69 throwable
70 bean
71 enum
72 xmlnode
79-98 bigdecimal
99-255 string
Da wirds dann doch schon ziemlich eng.
Hier also meine Frage: Gibts die Möglichkeit den UniversalSerializer in einer Art aufzublasen, sodass eine Range für kundenspezifische Anpassungen übrig bleibt, die in Zukunft auch von Hersteller Seite nicht angetastet wird?