def read(self, nroBytes):
        """
        Reads data from the L{ReadData} stream object.
        
        @type nroBytes: int
        @param nroBytes: The number of bytes to read.
        
        @rtype: str
        @return: A string containing the read data from the L{ReadData} stream object.
        
        @raise DataLengthException: The number of bytes tried to be read are more than the remaining in the L{ReadData} stream.
        """
        if nroBytes > self.length - self.offset:
            if self.log:
                print "Warning: Trying to read: %d bytes - only %d bytes left" % (nroBytes,  self.length - self.offset)
            nroBytes = self.length - self.offset

        resultStr = self.data[self.offset:self.offset + nroBytes]
        self.offset += nroBytes
        return resultStr