- StringIO и BytesIO - это методы, которые управляют строковыми и байтовыми данными в памяти.
- StringIO используется для строковых данных, а BytesIO - для двоичных данных.
- Эти классы создают объект, подобный файлу, который оперирует строковыми данными.
- Классы StringIO и BytesIO наиболее полезны в сценариях, когда вам нужно имитировать обычный файл.
В этом случае данные не будут храниться в памяти (ОЗУ) после записи в файл.
with open("test.bin","wb") as f: f.write(b"Hello world") f.write(b"Hello world") f.write(b"Hello world") f.write(b"Hello world") f.write(b"Hello world")
В этом случае вместо записи содержимого в файл оно записывается в буфер памяти. (Кусок оперативной памяти)
with io.BytesIO() as f: f.write(b"Hello world") f.write(b"Hello world") f.write(b"Hello world") f.write(b"Hello world") f.write(b"Hello world")
по сути, написание с использованием класса BytesIO эквивалентно
space = b"" space += b"Hello world" space += b"Hello world" space += b"Hello world" space += b"Hello world" space += b"Hello world"
Тогда почему мы определяем io.BytesIO () и почему бы не использовать конкатенацию байтов?
Ответ: Оптимизация и производительность
Есть ли другой способ чтения данных в изменяемый буфер памяти?
Да, мы можем использовать readinto() method
of файл объекта.
- Метод файлов
readinto()
может использоваться для заполнения данными любого предварительно выделенного массива. Включая массивы, созданные с помощью модуля numpy. - В отличие от обычного метода
read()
, методreadinto()
заполняет содержимое существующего буфера, а не выделяет новые объекты и возвращает их. - Таким образом, мы можем использовать его, чтобы не выделять лишнюю память.
Примеры:
Вы хотите читать двоичные данные непосредственно в изменяемый буфер без какого-либо промежуточного копирования для управления двоичными данными.
Использованная литература: