@@ -196,7 +196,7 @@ def __init__(self, file_like=None, read_size=0, use_list=True,
196196 self ._feeding = False
197197
198198 #: array of bytes feeded.
199- self ._buffer = b""
199+ self ._buffer = bytearray ()
200200 #: Which position we currently reads
201201 self ._buff_i = 0
202202
@@ -249,7 +249,7 @@ def feed(self, next_bytes):
249249 raise BufferFull
250250 # bytes + bytearray -> bytearray
251251 # So cast before append
252- self ._buffer += bytes ( next_bytes )
252+ self ._buffer += next_bytes
253253
254254 def _consume (self ):
255255 """ Gets rid of the used parts of the buffer. """
@@ -284,7 +284,7 @@ def _reserve(self, n):
284284
285285 # Strip buffer before checkpoint before reading file.
286286 if self ._buf_checkpoint > 0 :
287- self . _buffer = self ._buffer [self ._buf_checkpoint : ]
287+ del self ._buffer [: self ._buf_checkpoint ]
288288 self ._buff_i -= self ._buf_checkpoint
289289 self ._buf_checkpoint = 0
290290
@@ -308,7 +308,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
308308 n = 0
309309 obj = None
310310 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 ]
312313 self ._buff_i += 1
313314 if b & 0b10000000 == 0 :
314315 obj = b
@@ -339,7 +340,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
339340 elif b == 0xc4 :
340341 typ = TYPE_BIN
341342 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 ]
343345 self ._buff_i += 1
344346 if n > self ._max_bin_len :
345347 raise UnpackValueError ("%s exceeds max_bin_len(%s)" % (n , self ._max_bin_len ))
@@ -394,7 +396,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
394396 self ._buff_i += 8
395397 elif b == 0xcc :
396398 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 ]
398401 self ._buff_i += 1
399402 elif b == 0xcd :
400403 self ._reserve (2 )
@@ -462,7 +465,8 @@ def _read_header(self, execute=EX_CONSTRUCT):
462465 elif b == 0xd9 :
463466 typ = TYPE_RAW
464467 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 ]
466470 self ._buff_i += 1
467471 if n > self ._max_str_len :
468472 raise UnpackValueError ("%s exceeds max_str_len(%s)" , n , self ._max_str_len )
@@ -565,11 +569,13 @@ def _unpack(self, execute=EX_CONSTRUCT):
565569 if typ == TYPE_RAW :
566570 if self ._encoding is not None :
567571 obj = obj .decode (self ._encoding , self ._unicode_errors )
572+ else :
573+ obj = bytes (obj )
568574 return obj
569575 if typ == TYPE_EXT :
570- return self ._ext_hook (n , obj )
576+ return self ._ext_hook (n , bytes ( obj ) )
571577 if typ == TYPE_BIN :
572- return obj
578+ return bytes ( obj )
573579 assert typ == TYPE_IMMEDIATE
574580 return obj
575581
0 commit comments