'Read exactly *n* bytes from `self._fp`
This method is required because self._fp may be unbuffered,
i.e. return short reads.'

def _read_exact(self, n):

    data = self._fp.read(n)
    while (len(data) < n):
        b = self._fp.read((n - len(data)))
        if (not b):
            raise EOFError('Compressed    file    ended    before    the    end-of-stream    marker    was    reached')
        data += b
    return data
