in modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java [670:874]
void write(OptimizedObjectOutputStream out, Object obj) throws IOException {
out.write(type);
switch (type) {
case BYTE:
out.writeByte((Byte)obj);
break;
case SHORT:
out.writeShort((Short)obj);
break;
case INT:
out.writeInt((Integer)obj);
break;
case LONG:
out.writeLong((Long)obj);
break;
case FLOAT:
out.writeFloat((Float)obj);
break;
case DOUBLE:
out.writeDouble((Double)obj);
break;
case CHAR:
out.writeChar((Character)obj);
break;
case BOOLEAN:
out.writeBoolean((Boolean)obj);
break;
case BYTE_ARR:
out.writeByteArray((byte[])obj);
break;
case SHORT_ARR:
out.writeShortArray((short[])obj);
break;
case INT_ARR:
out.writeIntArray((int[])obj);
break;
case LONG_ARR:
out.writeLongArray((long[])obj);
break;
case FLOAT_ARR:
out.writeFloatArray((float[])obj);
break;
case DOUBLE_ARR:
out.writeDoubleArray((double[])obj);
break;
case CHAR_ARR:
out.writeCharArray((char[])obj);
break;
case BOOLEAN_ARR:
out.writeBooleanArray((boolean[])obj);
break;
case OBJ_ARR:
OptimizedClassDescriptor compDesc = OptimizedMarshallerUtils.classDescriptor(clsMap,
obj.getClass().getComponentType(),
GridBinaryMarshaller.USE_CACHE.get(),
ctx,
mapper);
compDesc.writeTypeData(out);
out.writeArray((Object[])obj);
break;
case STR:
out.writeString((String)obj);
break;
case UUID:
out.writeUuid((UUID)obj);
break;
case PROPS:
out.writeProperties((Properties)obj, dfltsFieldOff);
break;
case ARRAY_LIST:
out.writeArrayList((ArrayList<?>)obj);
break;
case HASH_MAP:
out.writeHashMap((HashMap<?, ?>)obj, loadFactorFieldOff, false);
break;
case HASH_SET:
out.writeHashSet((HashSet<?>)obj, HASH_SET_MAP_OFF, loadFactorFieldOff);
break;
case LINKED_LIST:
out.writeLinkedList((LinkedList<?>)obj);
break;
case LINKED_HASH_MAP:
out.writeLinkedHashMap((LinkedHashMap<?, ?>)obj, loadFactorFieldOff, accessOrderFieldOff, false);
break;
case LINKED_HASH_SET:
out.writeLinkedHashSet((LinkedHashSet<?>)obj, HASH_SET_MAP_OFF, loadFactorFieldOff);
break;
case DATE:
out.writeDate((Date)obj);
break;
case CLS:
OptimizedClassDescriptor clsDesc = OptimizedMarshallerUtils.classDescriptor(
clsMap, (Class<?>)obj, GridBinaryMarshaller.USE_CACHE.get(), ctx, mapper);
clsDesc.writeTypeData(out);
break;
case PROXY:
out.writeInt(proxyIntfs.length);
for (Class<?> intf : proxyIntfs) {
OptimizedClassDescriptor intfDesc = OptimizedMarshallerUtils.classDescriptor(
clsMap, intf, GridBinaryMarshaller.USE_CACHE.get(), ctx, mapper);
intfDesc.writeTypeData(out);
}
InvocationHandler ih = Proxy.getInvocationHandler(obj);
assert ih != null;
out.writeObject(ih);
break;
case ENUM:
writeTypeData(out);
out.writeInt(((Enum)obj).ordinal());
break;
case EXTERNALIZABLE:
writeTypeData(out);
out.writeShort(checksum);
out.writeExternalizable(obj);
break;
case SERIALIZABLE:
if (out.requireSerializable() && !isSerial)
throw new NotSerializableException("Must implement java.io.Serializable or " +
"set OptimizedMarshaller.setRequireSerializable() to false " +
"(note that performance may degrade if object is not Serializable): " + name);
writeTypeData(out);
out.writeShort(checksum);
out.writeSerializable(obj, writeObjMtds, fields(obj.getClass(), jobReceiverVersion()));
break;
default:
throw new IllegalStateException("Invalid class type: " + type);
}
}