docs: def read(self, n=4096):
          """
          Read up to `n` bytes of data from the Stream, after demuxing.
  
          Less than `n` bytes of data may be returned depending on the available
          payload, but the number of bytes returned will never exceed `n`.
  
          Because demuxing involves scanning 8-byte headers, the actual amount of
          data read from the underlying stream may be greater than `n`.
          """
  
          size = self._next_packet_size(n)
  
          if size <= 0:
              return
          else:
              data = six.binary_type()
              while len(data) < size:
                  nxt = self.stream.read(size - len(data))
                  if not nxt:
                      # the stream has closed, return what data we got
                      return data
                  data = data + nxt
              return data