8000 fallback: Use bytearray as buffer · sesam-io/msgpack-python@c16a1c6 · GitHub
[go: up one dir, main page]

Skip to content

Commit c16a1c6

Browse files
committed
fallback: Use bytearray as buffer
1 parent 6b89193 commit c16a1c6

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

msgpack/fallback.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
0