docs: def read(self, length=None):
          """
          Fill bytes and read some number of bytes
          (up to length if specified)
          <= length bytes may be read if reached the end of input
          if at buffer boundary, will attempt to read again until
          specified length is read
          """
          all_buffs = []
          while length is None or length > 0:
              self._fillbuff()
              if self.empty():
                  break
  
              buff = self.buff.read(length)
              all_buffs.append(buff)
              if length:
                  length -= len(buff)
  
          return b''.join(all_buffs)