'Read from potentially multi-volume archive.'

def _read(self, cnt):

    buf = []
    while (cnt > 0):
        if (self._cur_avail == 0):
            if (not self._open_next()):
                break
        if (cnt > self._cur_avail):
            data = self._fd.read(self._cur_avail)
        else:
            data = self._fd.read(cnt)
        if (not data):
            break
        cnt -= len(data)
        self._cur_avail -= len(data)
        buf.append(data)
    if (len(buf) == 1):
        return buf[0]
    return EMPTY.join(buf)
