6
6
7
7
8
8
if hasattr (sys , "pypy_version_info" ):
9
- # StringIO is slow on PyPy, StringIO is faster. However: PyPy's own
10
- # StringBuilder is fastest.
11
9
from __pypy__ import newlist_hint
10
+ from __pypy__ .builders import BytesBuilder
12
11
13
- try :
14
- from __pypy__ .builders import BytesBuilder as StringBuilder
15
- except ImportError :
16
- from __pypy__ .builders import StringBuilder
17
- USING_STRINGBUILDER = True
12
+ _USING_STRINGBUILDER = True
18
13
19
- class StringIO :
14
+ class BytesIO :
20
15
def __init__ (self , s = b"" ):
21
16
if s :
22
- self .builder = StringBuilder (len (s ))
17
+ self .builder = BytesBuilder (len (s ))
23
18
self .builder .append (s )
24
19
else :
25
- self .builder = StringBuilder ()
20
+ self .builder = BytesBuilder ()
26
21
27
22
def write (self , s ):
28
23
if isinstance (s , memoryview ):
@@ -35,14 +30,13 @@ def getvalue(self):
35
30
return self .builder .build ()
36
31
37
32
else :
38
- USING_STRINGBUILDER = False
39
- from io import BytesIO as StringIO
33
+ from io import BytesIO
40
34
41
35
newlist_hint = lambda size : []
36
+ _USING_STRINGBUILDER = False
42
37
43
38
44
39
from .exceptions import BufferFull , OutOfData , ExtraData , FormatError , StackError
45
-
46
40
from .ext import ExtType , Timestamp
47
41
48
42
@@ -335,6 +329,7 @@ def feed(self, next_bytes):
335
329
336
330
# Use extend here: INPLACE_ADD += doesn't reliably typecast memoryview in jython
337
331
self ._buffer .extend (view )
332
+ view .release ()
338
333
339
334
def _consume (self ):
340
335
"""Gets rid of the used parts of the buffer."""
@@ -671,7 +666,7 @@ def __init__(
671
666
self ._use_float = use_single_float
672
667
self ._autoreset = autoreset
673
668
self ._use_bin_type = use_bin_type
674
- self ._buffer = StringIO ()
669
+ self ._buffer = BytesIO ()
675
670
self ._datetime = bool (datetime )
676
671
self ._unicode_errors = unicode_errors or "strict"
677
672
if default is not None :
@@ -807,18 +802,18 @@ def pack(self, obj):
807
802
try :
808
803
self ._pack (obj )
809
804
except :
810
- self ._buffer = StringIO () # force reset
805
+ self ._buffer = BytesIO () # force reset
811
806
raise
812
807
if self ._autoreset :
813
808
ret = self ._buffer .getvalue ()
814
- self ._buffer = StringIO ()
809
+ self ._buffer = BytesIO ()
815
810
return ret
816
811
817
812
def pack_map_pairs (self , pairs ):
818
813
self ._pack_map_pairs (len (pairs ), pairs )
819
814
if self ._autoreset :
820
815
ret = self ._buffer .getvalue ()
821
- self ._buffer = StringIO ()
816
+ self ._buffer = BytesIO ()
822
817
return ret
823
818
824
819
def pack_array_header (self , n ):
@@ -827,7 +822,7 @@ def pack_array_header(self, n):
827
822
self ._pack_array_header (n )
828
823
if self ._autoreset :
829
824
ret = self ._buffer .getvalue ()
830
- self ._buffer = StringIO ()
825
+ self ._buffer = BytesIO ()
831
826
return ret
832
827
833
828
def pack_map_header (self , n ):
@@ -836,7 +831,7 @@ def pack_map_header(self, n):
836
831
self ._pack_map_header (n )
837
832
if self ._autoreset :
838
833
ret = self ._buffer .getvalue ()
839
- self ._buffer = StringIO ()
834
+ self ._buffer = BytesIO ()
840
835
return ret
841
836
842
837
def pack_ext_type (self , typecode , data ):
@@ -925,11 +920,11 @@ def reset(self):
925
920
926
921
This method is useful only when autoreset=False.
927
922
"""
928
- self ._buffer = StringIO ()
923
+ self ._buffer = BytesIO ()
929
924
930
925
def getbuffer (self ):
931
926
"""Return view of internal buffer."""
932
- if USING_STRINGBUILDER :
927
+ if _USING_STRINGBUILDER :
933
928
return memoryview (self .bytes ())
934
929
else :
935
930
return self ._buffer .getbuffer ()
0 commit comments