fixed anonymous object serialization
This commit is contained in:
parent
677b075a47
commit
46fe51803d
2 changed files with 32 additions and 25 deletions
|
@ -408,8 +408,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
byte [] arr = (byte []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
data.writeByte(arr [i]);
|
||||
for (byte element : arr) {
|
||||
data.writeByte(element);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -418,8 +418,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
float [] arr = (float []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
data.writeFloat(arr [i]);
|
||||
for (float element : arr) {
|
||||
data.writeFloat(element);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -428,8 +428,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
double [] arr = (double []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
data.writeDouble(arr [i]);
|
||||
for (double element : arr) {
|
||||
data.writeDouble(element);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -438,8 +438,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
short [] arr = (short []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
data.writeShort(arr [i]);
|
||||
for (short element : arr) {
|
||||
data.writeShort(element);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -448,8 +448,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
int [] arr = (int []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
data.writeInt(arr [i]);
|
||||
for (int element : arr) {
|
||||
data.writeInt(element);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -458,8 +458,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
boolean [] arr = (boolean []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
data.writeBoolean(arr [i]);
|
||||
for (boolean element : arr) {
|
||||
data.writeBoolean(element);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -468,8 +468,8 @@ public class ClassMapping extends ClassSerializer {
|
|||
Object [] arr = (Object []) obj;
|
||||
data.writeInt (arr.length);
|
||||
|
||||
for (int i = 0; i < arr.length; ++i) {
|
||||
cptMapping.write(data, arr [i], context);
|
||||
for (Object element : arr) {
|
||||
cptMapping.write(data, element, context);
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
|
@ -20,19 +20,18 @@ public class SerializationObject extends ClassSerializer {
|
|||
if (o == null) {
|
||||
data.writeBoolean(false);
|
||||
} else {
|
||||
data.writeBoolean(true);
|
||||
Class realClass = o.getClass();
|
||||
|
||||
ClassMapping delegateMapping;
|
||||
ClassSerializer delegateMapping;
|
||||
|
||||
if (context.classToId.containsKey(realClass.getCanonicalName())) {
|
||||
int index = context.classToId.get(realClass.getCanonicalName()) + 1;
|
||||
data.writeByte(index);
|
||||
delegateMapping = (ClassMapping) context.idToClass
|
||||
.get(index - 1);
|
||||
delegateMapping = context.idToClass.get(index - 1);
|
||||
} else {
|
||||
int index = context.classToId.size() + 1;
|
||||
delegateMapping = (ClassMapping) ClassMapping.get(realClass);
|
||||
|
||||
delegateMapping = ClassMapping.get(realClass);
|
||||
data.writeByte(index);
|
||||
Utils.writeUTF(data, realClass.getCanonicalName());
|
||||
context.classToId.put(realClass.getCanonicalName(),
|
||||
|
@ -40,7 +39,11 @@ public class SerializationObject extends ClassSerializer {
|
|||
context.idToClass.add(delegateMapping);
|
||||
}
|
||||
|
||||
delegateMapping.writeClass(o, data, context);
|
||||
if (delegateMapping instanceof ClassMapping) {
|
||||
((ClassMapping) delegateMapping).writeClass(o, data, context);
|
||||
} else {
|
||||
delegateMapping.write(data, o, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,20 +57,24 @@ public class SerializationObject extends ClassSerializer {
|
|||
} else {
|
||||
int index = data.readByte();
|
||||
|
||||
ClassMapping delegateMapping;
|
||||
ClassSerializer delegateMapping;
|
||||
|
||||
if (context.idToClass.size() < index) {
|
||||
String className = Utils.readUTF(data);
|
||||
|
||||
Class cls = Class.forName(className);
|
||||
delegateMapping = (ClassMapping) ClassMapping.get(cls);
|
||||
delegateMapping = ClassMapping.get(cls);
|
||||
|
||||
context.idToClass.add(ClassMapping.get(cls));
|
||||
} else {
|
||||
delegateMapping = (ClassMapping) context.idToClass
|
||||
.get(index - 1);
|
||||
delegateMapping = context.idToClass.get(index - 1);
|
||||
}
|
||||
|
||||
return delegateMapping.readClass(o, data, context);
|
||||
if (delegateMapping instanceof ClassMapping) {
|
||||
return ((ClassMapping) delegateMapping).readClass(o, data, context);
|
||||
} else {
|
||||
return delegateMapping.read(data, o, context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue