def read(self, source = None, **options):
        '''
        Reads and optionally parses a single message.
        
        :Parameters:
         - `source` - optional data buffer to be read, if not specified data is 
           read from the wrapped stream
        :Options:
         - `raw` (`boolean`) - indicates whether read data should parsed or 
           returned in raw byte form
         - `numpy_temporals` (`boolean`) - if ``False`` temporal vectors are
           backed by raw q representation (:class:`.QTemporalList`, 
           :class:`.QTemporal`) instances, otherwise are represented as 
           `numpy datetime64`/`timedelta64` arrays and atoms,
           **Default**: ``False``
         
        :returns: :class:`.QMessage` - read data (parsed or raw byte form) along
                  with meta information
        '''
        message = self.read_header(source)
        message.data = self.read_data(message.size, message.is_compressed, **options)

        return message
Reads and optionally parses a single message.
        
        :Parameters:
         - `source` - optional data buffer to be read, if not specified data is 
           read from the wrapped stream
        :Options:
         - `raw` (`boolean`) - indicates whether read data should parsed or 
           returned in raw byte form
         - `numpy_temporals` (`boolean`) - if ``False`` temporal vectors are
           backed by raw q representation (:class:`.QTemporalList`, 
           :class:`.QTemporal`) instances, otherwise are represented as 
           `numpy datetime64`/`timedelta64` arrays and atoms,
           **Default**: ``False``
         
        :returns: :class:`.QMessage` - read data (parsed or raw byte form) along
                  with meta information