Comments
Patch
@@ -79,20 +79,12 @@
def __init__(self, wrapped):
self._wrapped = wrapped
- # Do NOT implement readinto() by making it delegate to
- # _wrapped.readinto(), since that is unbuffered. The unpickler is fine
- # with just read() and readline(), so we don't need to implement it.
-
def readline(self):
return self._wrapped.readline()
- # issue multiple reads until size is fulfilled (or EOF is encountered)
- def read(self, size=-1):
- if size < 0:
- return self._wrapped.readall()
-
- buf = bytearray(size)
+ def readinto(self, buf):
pos = 0
+ size = len(buf)
with memoryview(buf) as view:
while pos < size:
@@ -102,7 +94,16 @@
break
pos += ret
- del buf[pos:]
+ return pos
+
+ # issue multiple reads until size is fulfilled (or EOF is encountered)
+ def read(self, size=-1):
+ if size < 0:
+ return self._wrapped.readall()
+
+ buf = bytearray(size)
+ n_read = self.readinto(buf)
+ del buf[n_read:]
return bytes(buf)