in hessian-lite/src/main/java/com/alibaba/com/caucho/hessian/io/BasicSerializer.java [105:297]
public void writeObject(Object obj, AbstractHessianOutput out)
throws IOException {
switch (_code) {
case BOOLEAN:
out.writeBoolean(((Boolean) obj).booleanValue());
break;
case BYTE:
case SHORT:
case INTEGER:
out.writeInt(((Number) obj).intValue());
break;
case LONG:
out.writeLong(((Number) obj).longValue());
break;
case FLOAT:
out.writeDouble(Double.parseDouble(String.valueOf(((Number) obj).floatValue())));
break;
case DOUBLE:
out.writeDouble(((Number) obj).doubleValue());
break;
case CHARACTER:
case CHARACTER_OBJECT:
out.writeString(String.valueOf(obj));
break;
case STRING:
out.writeString((String) obj);
break;
case STRING_BUILDER:
out.writeString(((StringBuilder) obj).toString());
break;
case DATE:
out.writeUTCDate(((Date) obj).getTime());
break;
case BOOLEAN_ARRAY: {
if (out.addRef(obj))
return;
boolean[] data = (boolean[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[boolean");
for (int i = 0; i < data.length; i++)
out.writeBoolean(data[i]);
if (hasEnd)
out.writeListEnd();
break;
}
case BYTE_ARRAY: {
byte[] data = (byte[]) obj;
out.writeBytes(data, 0, data.length);
break;
}
case SHORT_ARRAY: {
if (out.addRef(obj))
return;
short[] data = (short[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[short");
for (int i = 0; i < data.length; i++)
out.writeInt(data[i]);
if (hasEnd)
out.writeListEnd();
break;
}
case INTEGER_ARRAY: {
if (out.addRef(obj))
return;
int[] data = (int[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[int");
for (int i = 0; i < data.length; i++)
out.writeInt(data[i]);
if (hasEnd)
out.writeListEnd();
break;
}
case LONG_ARRAY: {
if (out.addRef(obj))
return;
long[] data = (long[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[long");
for (int i = 0; i < data.length; i++)
out.writeLong(data[i]);
if (hasEnd)
out.writeListEnd();
break;
}
case FLOAT_ARRAY: {
if (out.addRef(obj))
return;
float[] data = (float[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[float");
for (int i = 0; i < data.length; i++)
out.writeDouble(data[i]);
if (hasEnd)
out.writeListEnd();
break;
}
case DOUBLE_ARRAY: {
if (out.addRef(obj))
return;
double[] data = (double[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[double");
for (int i = 0; i < data.length; i++)
out.writeDouble(data[i]);
if (hasEnd)
out.writeListEnd();
break;
}
case STRING_ARRAY: {
if (out.addRef(obj))
return;
String[] data = (String[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[string");
for (int i = 0; i < data.length; i++) {
out.writeString(data[i]);
}
if (hasEnd)
out.writeListEnd();
break;
}
case CHARACTER_ARRAY: {
char[] data = (char[]) obj;
out.writeString(data, 0, data.length);
break;
}
case OBJECT_ARRAY: {
if (out.addRef(obj))
return;
Object[] data = (Object[]) obj;
boolean hasEnd = out.writeListBegin(data.length, "[object");
for (int i = 0; i < data.length; i++) {
out.writeObject(data[i]);
}
if (hasEnd)
out.writeListEnd();
break;
}
case NULL:
out.writeNull();
break;
case OBJECT:
ObjectHandleSerializer.SER.writeObject(obj, out);
break;
default:
throw new RuntimeException(_code + " unknown code for " + obj.getClass());
}
}