def _next_chunk()

in alibabacloud_oss_v2/filelike.py [0:0]


    def _next_chunk(self, offset):
        if self._read_buf_offset != offset:
            self._read_buf_offset = offset
            self._seq_read_amount = 0

            if self._generator:
                self._num_ooo_read += 1

            self._close_readers()

        if self._read_buf:
            data = self._read_buf
            self._read_buf = None
        else:

            # switch to prefetch reader
            if (self._enable_prefetch and
                self._seq_read_amount >= self._prefetch_threshold and
                self._num_ooo_read < 3):

                if not self._generator:
                    self._generator = self._prefetch_generator(offset)

                try:
                    data = next(self._generator)
                except StopIteration:
                    data =  b''
                except Exception:
                    # fall back to read serially
                    self._seq_read_amount = 0
                    self._close_readers()
                    data = self._next_chunk_direct(offset)
            else:
                data = self._next_chunk_direct(offset)

        if data is not None:
            cn = len(data)
            self._read_buf_offset += cn
            self._seq_read_amount += cn

        return data