Read and return up to n bytes. If the argument is omitted, None, or negative, data is read and returned until EOF is reached.
(self, n=-1)
| 1070 | return True |
| 1071 | |
| 1072 | def read(self, n=-1): |
| 1073 | """Read and return up to n bytes. |
| 1074 | If the argument is omitted, None, or negative, data is read and returned until EOF is reached. |
| 1075 | """ |
| 1076 | if self.closed: |
| 1077 | raise ValueError("read from closed file.") |
| 1078 | if n is None or n < 0: |
| 1079 | buf = self._readbuffer[self._offset:] |
| 1080 | self._readbuffer = b'' |
| 1081 | self._offset = 0 |
| 1082 | while not self._eof: |
| 1083 | buf += self._read1(self.MAX_N) |
| 1084 | return buf |
| 1085 | |
| 1086 | end = n + self._offset |
| 1087 | if end < len(self._readbuffer): |
| 1088 | buf = self._readbuffer[self._offset:end] |
| 1089 | self._offset = end |
| 1090 | return buf |
| 1091 | |
| 1092 | n = end - len(self._readbuffer) |
| 1093 | buf = self._readbuffer[self._offset:] |
| 1094 | self._readbuffer = b'' |
| 1095 | self._offset = 0 |
| 1096 | while n > 0 and not self._eof: |
| 1097 | data = self._read1(n) |
| 1098 | if n < len(data): |
| 1099 | self._readbuffer = data |
| 1100 | self._offset = n |
| 1101 | buf += data[:n] |
| 1102 | break |
| 1103 | buf += data |
| 1104 | n -= len(data) |
| 1105 | return buf |
| 1106 | |
| 1107 | def _update_crc(self, newdata): |
| 1108 | # Update the CRC using the given data. |