docs: def _read(self, cnt):
          """Read from potentially multi-volume archive."""
  
          buf = []
          while cnt > 0:
              # next vol needed?
              if self._cur_avail == 0:
                  if not self._open_next():
                      break
  
              # fd is in read pos, do the read
              if cnt > self._cur_avail:
                  data = self._fd.read(self._cur_avail)
              else:
                  data = self._fd.read(cnt)
              if not data:
                  break
  
              # got some data
              cnt -= len(data)
              self._cur_avail -= len(data)
              buf.append(data)
  
          if len(buf) == 1:
              return buf[0]
          return EMPTY.join(buf)