in java/fury-core/src/main/java/org/apache/fury/serializer/MetaSharedSerializer.java [122:193]
public T read(MemoryBuffer buffer) {
if (isRecord) {
Object[] fieldValues =
new Object[finalFields.length + otherFields.length + containerFields.length];
readFields(buffer, fieldValues);
fieldValues = RecordUtils.remapping(recordInfo, fieldValues);
try {
T t = (T) constructor.invokeWithArguments(fieldValues);
Arrays.fill(recordInfo.getRecordComponents(), null);
return t;
} catch (Throwable e) {
Platform.throwException(e);
}
}
T obj = newBean();
Fury fury = this.fury;
RefResolver refResolver = this.refResolver;
ClassResolver classResolver = this.classResolver;
SerializationBinding binding = this.binding;
refResolver.reference(obj);
// read order: primitive,boxed,final,other,collection,map
ObjectSerializer.FinalTypeField[] finalFields = this.finalFields;
for (int i = 0; i < finalFields.length; i++) {
ObjectSerializer.FinalTypeField fieldInfo = finalFields[i];
boolean isFinal = this.isFinal[i];
FieldAccessor fieldAccessor = fieldInfo.fieldAccessor;
boolean nullable = fieldInfo.nullable;
if (fieldAccessor != null) {
short classId = fieldInfo.classId;
if (AbstractObjectSerializer.readPrimitiveFieldValueFailed(
fury, buffer, obj, fieldAccessor, classId)
&& (nullable
? AbstractObjectSerializer.readBasicNullableObjectFieldValueFailed(
fury, buffer, obj, fieldAccessor, classId)
: AbstractObjectSerializer.readBasicObjectFieldValueFailed(
fury, buffer, obj, fieldAccessor, classId))) {
assert fieldInfo.classInfo != null;
Object fieldValue =
AbstractObjectSerializer.readFinalObjectFieldValue(
binding, refResolver, classResolver, fieldInfo, isFinal, buffer);
fieldAccessor.putObject(obj, fieldValue);
}
} else {
if (skipPrimitiveFieldValueFailed(fury, fieldInfo.classId, buffer)) {
if (fieldInfo.classInfo == null) {
// TODO(chaokunyang) support registered serializer in peer with ref tracking disabled.
fury.readRef(buffer, classInfoHolder);
} else {
AbstractObjectSerializer.readFinalObjectFieldValue(
binding, refResolver, classResolver, fieldInfo, isFinal, buffer);
}
}
}
}
for (ObjectSerializer.GenericTypeField fieldInfo : otherFields) {
Object fieldValue = AbstractObjectSerializer.readOtherFieldValue(binding, fieldInfo, buffer);
FieldAccessor fieldAccessor = fieldInfo.fieldAccessor;
if (fieldAccessor != null) {
fieldAccessor.putObject(obj, fieldValue);
}
}
Generics generics = fury.getGenerics();
for (ObjectSerializer.GenericTypeField fieldInfo : containerFields) {
Object fieldValue =
AbstractObjectSerializer.readContainerFieldValue(binding, generics, fieldInfo, buffer);
FieldAccessor fieldAccessor = fieldInfo.fieldAccessor;
if (fieldAccessor != null) {
fieldAccessor.putObject(obj, fieldValue);
}
}
return obj;
}