code: def read(self):
      
      data = None
      while True:
        last_offset = self.tell()
        try:
          (chunk, record_type) = self.__try_read_record()
          if record_type == _RECORD_TYPE_NONE:
            self.__sync()
          elif record_type == _RECORD_TYPE_FULL:
            if data is not None:
              logging.warning(
                  "Ordering corruption: Got FULL record while already "
                  "in a chunk at offset %d", last_offset)
            return chunk
          elif record_type == _RECORD_TYPE_FIRST:
            if data is not None:
              logging.warning(
                  "Ordering corruption: Got FIRST record while already "
                  "in a chunk at offset %d", last_offset)
            data = chunk
          elif record_type == _RECORD_TYPE_MIDDLE:
            if data is None:
              logging.warning(
                  "Ordering corruption: Got MIDDLE record before FIRST "
                  "record at offset %d", last_offset)
            else:
              data += chunk
          elif record_type == _RECORD_TYPE_LAST:
            if data is None:
              logging.warning(
                  "Ordering corruption: Got LAST record but no chunk is in "
                  "progress at offset %d", last_offset)
            else:
              result = data + chunk
              data = None
              return result
          else:
            raise errors.InvalidRecordError(
                "Unsupported record type: %s" % record_type)
  
        except errors.InvalidRecordError, e:
          logging.warning("Invalid record encountered at %s (%s). Syncing to "
                          "the next block", last_offset, e)
          data = None
          self.__sync()
docs: Reads record from current position in reader.
  
      Returns:
        original bytes stored in a single record.