'Return size bytes from the stream.'

def _read(self, size):

    if (self.comptype == 'tar'):
        return self.__read(size)
    c = len(self.dbuf)
    while (c < size):
        buf = self.__read(self.bufsize)
        if (not buf):
            break
        try:
            buf = self.cmp.decompress(buf)
        except IOError:
            raise ReadError('invalid    compressed    data')
        self.dbuf += buf
        c += len(buf)
    buf = self.dbuf[:size]
    self.dbuf = self.dbuf[size:]
    return buf
