@@ -525,7 +525,7 @@ def read(self, size=None):
|
525 | 525 | if not buf: |
526 | 526 | break |
527 | 527 | t.append(buf) |
528 | | -buf = "".join(t) |
| 528 | +buf = b"".join(t) |
529 | 529 | else: |
530 | 530 | buf = self._read(size) |
531 | 531 | self.pos += len(buf) |
@@ -538,6 +538,7 @@ def _read(self, size):
|
538 | 538 | return self.__read(size) |
539 | 539 | |
540 | 540 | c = len(self.dbuf) |
| 541 | +t = [self.dbuf] |
541 | 542 | while c < size: |
542 | 543 | buf = self.__read(self.bufsize) |
543 | 544 | if not buf: |
@@ -546,26 +547,27 @@ def _read(self, size):
|
546 | 547 | buf = self.cmp.decompress(buf) |
547 | 548 | except self.exception: |
548 | 549 | raise ReadError("invalid compressed data") |
549 | | -self.dbuf += buf |
| 550 | +t.append(buf) |
550 | 551 | c += len(buf) |
551 | | -buf = self.dbuf[:size] |
552 | | -self.dbuf = self.dbuf[size:] |
553 | | -return buf |
| 552 | +t = b"".join(t) |
| 553 | +self.dbuf = t[size:] |
| 554 | +return t[:size] |
554 | 555 | |
555 | 556 | def __read(self, size): |
556 | 557 | """Return size bytes from stream. If internal buffer is empty, |
557 | 558 | read another block from the stream. |
558 | 559 | """ |
559 | 560 | c = len(self.buf) |
| 561 | +t = [self.buf] |
560 | 562 | while c < size: |
561 | 563 | buf = self.fileobj.read(self.bufsize) |
562 | 564 | if not buf: |
563 | 565 | break |
564 | | -self.buf += buf |
| 566 | +t.append(buf) |
565 | 567 | c += len(buf) |
566 | | -buf = self.buf[:size] |
567 | | -self.buf = self.buf[size:] |
568 | | -return buf |
| 568 | +t = b"".join(t) |
| 569 | +self.buf = t[size:] |
| 570 | +return t[:size] |
569 | 571 | # class _Stream |
570 | 572 | |
571 | 573 | class _StreamProxy(object): |
|