| 949 | return self.read(size) |
| 950 | |
| 951 | def write(self, b): |
| 952 | if isinstance(b, str): |
| 953 | raise TypeError("can't write str to binary stream") |
| 954 | with memoryview(b) as view: |
| 955 | if self.closed: |
| 956 | raise ValueError("write to closed file") |
| 957 | |
| 958 | n = view.nbytes # Size of any bytes-like object |
| 959 | if n == 0: |
| 960 | return 0 |
| 961 | |
| 962 | with self._lock: |
| 963 | pos = self._pos |
| 964 | if pos > len(self._buffer): |
| 965 | # Pad buffer to pos with null bytes. |
| 966 | self._buffer.resize(pos) |
| 967 | self._buffer[pos:pos + n] = view |
| 968 | self._pos += n |
| 969 | return n |
| 970 | |
| 971 | def seek(self, pos, whence=0): |
| 972 | if self.closed: |