def _read_range(self, start, end=0):
        """
        Read a range of bytes in stream.

        Args:
            start (int): Start stream position.
            end (int): End stream position.
                0 To not specify end.

        Returns:
            bytes: number of bytes read
        """
        if start >= self._size:
            # EOF. Do not detect using 416 (Out of range) error, 200 returned.
            return bytes()

        # Get object bytes range
        with _handle_oss_error():
            response = self._bucket.get_object(key=self._key, headers=dict(
                Range=self._http_range(
                    # Returns full file if end > size
                    start, end if end <= self._size else self._size)))

        # Get object content
        return response.read()