code: private void readColumn(int startIndex, int length) throws Exception
     {
        if (m_currentTable != null)
        {
           int value = FastTrackUtility.getByte(m_buffer, startIndex);
           Class<?> klass = COLUMN_MAP[value];
           if (klass == null)
           {
              klass = UnknownColumn.class;
           }
  
           FastTrackColumn column = (FastTrackColumn) klass.newInstance();
           m_currentColumn = column;
  
           logColumnData(startIndex, length);
  
           column.read(m_currentTable.getType(), m_buffer, startIndex, length);
           FastTrackField type = column.getType();
  
           //
           // Don't try to add this data if:
           // 1. We don't know what type it is
           // 2. We have seen the type already
           //
           if (type != null && !m_currentFields.contains(type))
           {
              m_currentFields.add(type);
              m_currentTable.addColumn(column);
              updateDurationTimeUnit(column);
              updateWorkTimeUnit(column);
  
              logColumn(column);
           }
        }
     }
docs: Read data for a single column.
  
  @param startIndex block start
  @param length block length