@@ -216,22 +216,23 @@ def write(self, data):
216216 else :
217217 return self .file_write (data )
218218
219- def write_large (self , header , payload ):
219+ def write_large_bytes (self , opcode , size_header , payload ):
220220 if len (payload ) >= self ._FRAME_SIZE_TARGET and self .current_frame :
221221 # Terminate the current frame to write the next frame directly into
222222 # the underlying file to skip the unnecessary memory allocations
223223 # of a large temporary buffer.
224224 self .commit_frame (force = True )
225225 write = self .file_write
226- write (FRAME + pack ("<Q" , len (header ) + len (payload )))
226+ frame_size = len (opcode ) + len (size_header ) + len (payload )
227+ write (FRAME + pack ("<Q" , frame_size ))
227228
228229 # Be careful to not concatenate the header and the payload prior to
229230 # calling 'write' as do not want to allocate a large temporary
230231 # bytes object.
231- write (header )
232+ write (opcode + size_header )
232233 write (payload )
233234 else :
234- self .write (header + payload )
235+ self .write (opcode + size_header + payload )
235236
236237
237238class _Unframer :
@@ -396,7 +397,7 @@ def __init__(self, file, protocol=None, *, fix_imports=True):
396397 raise TypeError ("file must have a 'write' attribute" )
397398 self .framer = _Framer (self ._file_write )
398399 self .write = self .framer .write
399- self ._write_large = self .framer .write_large
400+ self ._write_large_bytes = self .framer .write_large_bytes
400401 self .memo = {}
401402 self .proto = int (protocol )
402403 self .bin = protocol >= 1
@@ -714,9 +715,9 @@ def save_bytes(self, obj):
714715 if n <= 0xff :
715716 self .write (SHORT_BINBYTES + pack ("<B" , n ) + obj )
716717 elif n > 0xffffffff and self .proto >= 4 :
717- self ._write_large (BINBYTES8 + pack ("<Q" , n ), obj )
718+ self ._write_large_bytes (BINBYTES8 , pack ("<Q" , n ), obj )
718719 else :
719- self ._write_large (BINBYTES + pack ("<I" , n ), obj )
720+ self ._write_large_bytes (BINBYTES , pack ("<I" , n ), obj )
720721 self .memoize (obj )
721722 dispatch [bytes ] = save_bytes
722723
@@ -727,9 +728,9 @@ def save_str(self, obj):
727728 if n <= 0xff and self .proto >= 4 :
728729 self .write (SHORT_BINUNICODE + pack ("<B" , n ) + encoded )
729730 elif n > 0xffffffff and self .proto >= 4 :
730- self ._write_large (BINUNICODE8 + pack ("<Q" , n ), encoded )
731+ self ._write_large_bytes (BINUNICODE8 , pack ("<Q" , n ), encoded )
731732 else :
732- self ._write_large (BINUNICODE + pack ("<I" , n ), encoded )
733+ self ._write_large_bytes (BINUNICODE , pack ("<I" , n ), encoded )
733734 else :
734735 obj = obj .replace ("\\ " , "\\ u005c" )
735736 obj = obj .replace ("\n " , "\\ u000a" )
0 commit comments