Python 3 – не копирующий интерфейс потока для bytearray?

Я читаю буфер данных от где-то до bytearray . Теперь я хочу работать с этими данными, используя потоковый интерфейс (например, read , seek и т. Д.),

Могу ли я просто обернуть мой io.BytesIO с помощью io.BytesIO ?

 mybytearray = bytearray(...) stream = io.BytesIO(mybytearray) 

Мой страх здесь – BytesIO копирует данные mybytearray , но я не хочу этого, потому что буфер очень большой. Мне не нужны копии, я хочу, чтобы поток работал с исходными данными и также мог изменять его. Что может быть сделано?

One Solution collect form web for “Python 3 – не копирующий интерфейс потока для bytearray?”

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 copy-on-write. Последний патч (cow6) поддерживает только копирование только для bytes .

  • Должен ли я использовать «in» или «или» в инструкции if в Python 3.x для проверки переменной на несколько значений?
  • Как читать числа из файла в Python?
  • Почему str.count ('') и len (str) дают разные результаты?
  • Цепочка функций в Python
  • python3 - узнав о поиске, этот очень простой пример не работает правильно
  • Почему я должен добавить python в PATH
  • Группировка списков в списках в Python 3
  • Должен ли я кэшировать результаты диапазона, если я их повторно использую?
  • Python - лучший язык программирования в мире.