public void read(Object record, Decoder dec) throws IOException {
   Object reuseObj = null;
   if (_reuse) {
     _recordAccess.getField(record, _field.getName(), _field.getPos());
   }
   _recordAccess.addField(
       record, _field.getName(), _field.getPos(), _itemReader.read(reuseObj, dec));
 }
  private ItemReader resolveRecord(RecordSchema schema) {
    ItemReader recordReader = _recordReaders.get(schema);
    if (recordReader != null) {
      return recordReader;
    }

    RecordAccess recordAccess = getRecordAccess(schema);
    List<FieldReader> fieldReaders = new ArrayList<FieldReader>();
    recordReader = new RecordReader(recordAccess, fieldReaders);
    _recordReaders.put(schema, recordReader);

    for (Field field : schema) {
      ItemReader itemReader = resolveReader(field.getSchema());
      boolean reuse = isReusable(field.getSchema().getType());
      FieldReader fieldReader = new FieldReader(field, recordAccess, itemReader, reuse);
      fieldReaders.add(fieldReader);
    }

    return recordReader;
  }