BytesIO
управляет собственной памятью и копирует буфер, используемый для ее инициализации.Вы можете инкапсулировать ваш bytearray
в подобный файлу класс.Или вы можете пойти другим путем, позволяя объекту BytesIO
распределять память.Затем вы можете получить представление о буфере, который можно изменить с помощью индекса и фрагмента, но вы не можете изменить размер буфера, пока представление существует:
>>> f = io.BytesIO(b'abc')
>>> view = f.getbuffer()
>>> view[:] = b'def'
>>> f.getvalue()
b'def'
>>> view[3] = b'g'
IndexError: index out of bounds
>>> f.seek(0, 2)
>>> f.write(b'g')
BufferError: Existing exports of data: object cannot be re-sized
>>> del view
>>> f.write(b'g')
>>> f.getvalue()
b'defg'
Редактировать:
См. выпуск 22003 , BytesIO
копирование при записи.Последний патч (cow6) поддерживает копирование при записи только для bytes
.