def readinto(self, buf):
"""Zero-copy read directly into buffer."""
got = 0
vbuf = memoryview(buf)
while got < len(buf):
# next vol needed?
if self.cur_avail == 0:
if not self._open_next():
break
# length for next read
cnt = len(buf) - got
if cnt > self.cur_avail:
cnt = self.cur_avail
# read into temp view
res = self.fd.readinto(vbuf[got : got + cnt])
if not res:
break
if self.crc_check:
self.CRC = crc32(vbuf[got : got + res], self.CRC)
self.cur_avail -= res
self.remain -= res
got += res
return got
评论列表
文章目录