summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorINADA Naoki <songofacandy@gmail.com>2016-05-24 07:32:30 +0900
committerINADA Naoki <songofacandy@gmail.com>2016-05-24 07:32:30 +0900
commitc16a1c6bdf667d5cfe314d09d5613808f1243a8f (patch)
treef9604d7088d2249d3cbb62cbdf922252bf861ccd
parent6b8919355d6acdda74acc568dd348598e552f003 (diff)
downloadmsgpack-python-c16a1c6bdf667d5cfe314d09d5613808f1243a8f.tar.gz
fallback: Use bytearray as buffer
-rw-r--r--msgpack/fallback.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index 9b32610..a23ad8c 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -196,7 +196,7 @@ class Unpacker(object):
self._feeding = False
#: array of bytes feeded.
- self._buffer = b""
+ self._buffer = bytearray()
#: Which position we currently reads
self._buff_i = 0
@@ -249,7 +249,7 @@ class Unpacker(object):
raise BufferFull
# bytes + bytearray -> bytearray
# So cast before append
- self._buffer += bytes(next_bytes)
+ self._buffer += next_bytes
def _consume(self):
""" Gets rid of the used parts of the buffer. """
@@ -284,7 +284,7 @@ class Unpacker(object):
# Strip buffer before checkpoint before reading file.
if self._buf_checkpoint > 0:
- self._buffer = self._buffer[self._buf_checkpoint:]
+ del self._buffer[:self._buf_checkpoint]
self._buff_i -= self._buf_checkpoint
self._buf_checkpoint = 0
@@ -308,7 +308,8 @@ class Unpacker(object):
n = 0
obj = None
self._reserve(1)
- b = struct.unpack_from("B", self._buffer, self._buff_i)[0]
+ #b = struct.unpack_from("B", self._buffer, self._buff_i)[0]
+ b = self._buffer[self._buff_i]
self._buff_i += 1
if b & 0b10000000 == 0:
obj = b
@@ -339,7 +340,8 @@ class Unpacker(object):
elif b == 0xc4:
typ = TYPE_BIN
self._reserve(1)
- n = struct.unpack_from("B", self._buffer, self._buff_i)[0]
+ #n = struct.unpack_from("B", self._buffer, self._buff_i)[0]
+ n = self._buffer[self._buff_i]
self._buff_i += 1
if n > self._max_bin_len:
raise UnpackValueError("%s exceeds max_bin_len(%s)" % (n, self._max_bin_len))
@@ -394,7 +396,8 @@ class Unpacker(object):
self._buff_i += 8
elif b == 0xcc:
self._reserve(1)
- obj = struct.unpack_from("B", self._buffer, self._buff_i)[0]
+ #obj = struct.unpack_from("B", self._buffer, self._buff_i)[0]
+ obj = self._buffer[self._buff_i]
self._buff_i += 1
elif b == 0xcd:
self._reserve(2)
@@ -462,7 +465,8 @@ class Unpacker(object):
elif b == 0xd9:
typ = TYPE_RAW
self._reserve(1)
- n, = struct.unpack_from("B", self._buffer, self._buff_i)
+ #n, = struct.unpack_from("B", self._buffer, self._buff_i)
+ n = self._buffer[self._buff_i]
self._buff_i += 1
if n > self._max_str_len:
raise UnpackValueError("%s exceeds max_str_len(%s)", n, self._max_str_len)
@@ -565,11 +569,13 @@ class Unpacker(object):
if typ == TYPE_RAW:
if self._encoding is not None:
obj = obj.decode(self._encoding, self._unicode_errors)
+ else:
+ obj = bytes(obj)
return obj
if typ == TYPE_EXT:
- return self._ext_hook(n, obj)
+ return self._ext_hook(n, bytes(obj))
if typ == TYPE_BIN:
- return obj
+ return bytes(obj)
assert typ == TYPE_IMMEDIATE
return obj