fixed anonymous object serialization

This commit is contained in:
SpaceToad 2014-03-02 10:25:57 +01:00
parent 677b075a47
commit 46fe51803d
2 changed files with 32 additions and 25 deletions

View file

@ -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;

View file

@ -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);
}
}
}