def read1(self, size=-1):
        """Read up to *size* bytes.

        This function reads from the buffer only once. It is useful in case you
        need to read a large input, and want to do so efficiently. If *size* is
        big enough, then this method will return the chunks passed into the
        memory buffer verbatim without any copying or slicing.
        """
        self._check_readable()
        chunk = self._buffer.get_chunk(size)
        if not chunk and not self._buffer.eof and self._buffer.error:
            raise compat.saved_exc(self._buffer.error)
        return chunk