}
// Field by field deseralization
for(int index = 0; index < schema.getFields().size(); index++) {
Deserializer customDeser = customDeserializers[index];
Field field = schema.getField(index);
// Nulls control
if (field.isNullable() && nullsAbsolute.flags[index]) {
// Null field. Nothing to deserialize.
continue;
}
switch(field.getType()) {
case INT:
tuple.set(index, WritableUtils.readVInt(input));
break;
case LONG:
tuple.set(index, WritableUtils.readVLong(input));
break;
case DOUBLE:
tuple.set(index, input.readDouble());
break;
case FLOAT:
tuple.set(index, input.readFloat());
break;
case STRING:
readUtf8(input, tuple, index);
break;
case BOOLEAN:
byte b = input.readByte();
tuple.set(index, (b != 0));
break;
case ENUM:
readEnum(input, tuple, field.getObjectClass(), index);
break;
case BYTES:
readBytes(input, tuple, index);
break;
case OBJECT:
readCustomObject(input, tuple, field.getObjectClass(), index, customDeser);
break;
default:
throw new IOException("Not supported type:" + field.getType());
}
}
}