@@ -196,7 +196,7 @@ def __init__(self, file_like=None, read_size=0, use_list=True,
196
196
self ._feeding = False
197
197
198
198
#: array of bytes feeded.
199
- self ._buffer = b""
199
+ self ._buffer = bytearray ()
200
200
#: Which position we currently reads
201
201
self ._buff_i = 0
202
202
@@ -249,7 +249,7 @@ def feed(self, next_bytes):
249
249
raise BufferFull
250
250
# bytes + bytearray -> bytearray
251
251
# So cast before append
252
- self ._buffer += bytes ( next_bytes )
252
+ self ._buffer += next_bytes
253
253
254
254
def _consume (self ):
255
255
""" Gets rid of the used parts of the buffer. """
@@ -284,7 +284,7 @@ def _reserve(self, n):
284
284
285
285
# Strip buffer before checkpoint before reading file.
286
286
if self ._buf_checkpoint > 0 :
287
- self . _buffer = self ._buffer [self ._buf_checkpoint : ]
287
+ del self ._buffer [: self ._buf_checkpoint ]
288
288
self ._buff_i -= self ._buf_checkpoint
289
289
self ._buf_checkpoint = 0
290
290
@@ -308,7 +308,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
308
308
n = 0
309
309
obj = None
310
310
self ._reserve (1 )
311
- b = struct .unpack_from ("B" , self ._buffer , self ._buff_i )[0 ]
311
+ #b = struct.unpack_from("B", self._buffer, self._buff_i)[0]
312
+ b = self ._buffer [self ._buff_i ]
312
313
self ._buff_i += 1
313
314
if b & 0b10000000 == 0 :
314
315
obj = b
@@ -339,7 +340,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
339
340
elif b == 0xc4 :
340
341
typ = TYPE_BIN
341
342
self ._reserve (1 )
342
- n = struct .unpack_from ("B" , self ._buffer , self ._buff_i )[0 ]
343
+ #n = struct.unpack_from("B", self._buffer, self._buff_i)[0]
344
+ n = self ._buffer [self ._buff_i ]
343
345
self ._buff_i += 1
344
346
if n > self ._max_bin_len :
345
347
raise UnpackValueError ("%s exceeds max_bin_len(%s)" % (n , self ._max_bin_len ))
@@ -394,7 +396,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
394
396
self ._buff_i += 8
395
397
elif b == 0xcc :
396
398
self ._reserve (1 )
397
- obj = struct .unpack_from ("B" , self ._buffer , self ._buff_i )[0 ]
399
+ #obj = struct.unpack_from("B", self._buffer, self._buff_i)[0]
400
+ obj = self ._buffer [self ._buff_i ]
398
401
self ._buff_i += 1
399
402
elif b == 0xcd :
400
403
self ._reserve (2 )
@@ -462,7 +465,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
462
465
elif b == 0xd9 :
463
466
typ = TYPE_RAW
464
467
self ._reserve (1 )
465
- n , = struct .unpack_from ("B" , self ._buffer , self ._buff_i )
468
+ #n, = struct.unpack_from("B", self._buffer, self._buff_i)
469
+ n = self ._buffer [self ._buff_i ]
466
470
self ._buff_i += 1
467
471
if n > self ._max_str_len :
468
472
raise UnpackValueError ("%s exceeds max_str_len(%s)" , n , self ._max_str_len )
@@ -565,11 +569,13 @@ def _unpack(self, execute=EX_CONSTRUCT):
565
569
if typ == TYPE_RAW :
566
570
if self ._encoding is not None :
567
571
obj = obj .decode (self ._encoding , self ._unicode_errors )
572
+ else :
573
+ obj = bytes (obj )
568
574
return obj
569
575
if typ == TYPE_EXT :
570
- return self ._ext_hook (n , obj )
576
+ return self ._ext_hook (n , bytes ( obj ) )
571
577
if typ == TYPE_BIN :
572
- return obj
578
+ return bytes ( obj )
573
579
assert typ == TYPE_IMMEDIATE
574
580
return obj
575
581
0 commit comments