in alibabacloud_oss_v2/filelike.py [0:0]
def _read_at_into(self, offset, buf):
"""Read data into *buf*"""
if offset >= self._size_in_bytes:
return 0
if not isinstance(buf, memoryview):
buf = memoryview(buf)
if buf.nbytes == 0:
return 0
buf = buf.cast('B')
written = 0
while written < len(buf):
chunk = self._next_chunk(offset + written)
if chunk is None:
continue
# eof
if chunk == b'':
break
remains = len(buf) - written
n = min(remains, len(chunk))
buf[written:written + n] = chunk[:n]
# Save the extra data in the buffer.
if n < len(chunk):
self._read_buf = chunk[n:]
rn = len(self._read_buf)
self._read_buf_offset -= rn
self._seq_read_amount -= rn
written += n
return written