Содержание с кратким описанием:
Модуль io предоставляет основные средства Python для работы с различными типами ввода-вывода. Независимо от своей категории каждый конкретный объект потока также будет иметь различные возможности: он может быть доступен только для чтения, только для записи или для чтения и записи.
io.DEFAULT_BUFFER_SIZE, io.open(), io.open_code() и исключения io.BlockingIOError, io.UnsupportedOperation
В верхней части иерархии ввода-вывода находится абстрактный базовый класс `IOBase`. Абстрактный класс `RawIOBase` расширяет `IOBase`. Он имеет дело с чтением и записью байтов в поток. Абстрактный класс BufferedIOBase имеет дело с буферизацией на необработанном байтовом потоке `RawIOBase`.
Класс io.IOBase() предоставляет пустые абстрактные реализации для многих методов, которые выборочно могут переопределять производные классы. Реализация по умолчанию представляют файл, который нельзя прочитать, записать или найти.
Базовый класс io.RawIOBase() предназначен для необработанного двоичного ввода/вывода. Наследует класс io.IOBase. Не имеет публичного конструктора. Необработанный двоичный ввод-вывод обычно обеспечивает низкоуровневый доступ к базовому устройству ОС или API.
Базовый класс io.BufferedIOBase предназначен для двоичных потоков, которые поддерживают некоторую буферизацию. Класс io.BufferedIOBase наследует абстрактный класс io.IOBase. Не имеет публичного конструктора.
FileIO представляет файл уровня ОС, содержащий байтовые данные. Он реализует RawIOBase интерфейс и следовательно IOBase интерфейс тоже.
Класс io.BytesIO реализация потока, использующая буфер байтов в памяти. Класс io.BytesIO наследует io.BufferedIOBase. Буфер отбрасывается при вызове метода close().
Класс io.BytesIO() реализация потока, использующая буфер байтов в памяти. Класс io.BufferedReader - доступ к читаемому последовательному объекту RawIOBase. Класс io.BufferedReader - доступ к записываемому последовательному объекту RawIOBase.
Класс io.TextIOBase() это базовый класс для текстовых потоков. Этот класс предоставляет символьный и линейный интерфейс для потокового ввода-вывода. Он наследует класс io.IOBase. Не имеет никакого публичного конструктора.
Класс io.TextIOWrapper() это буферизованный текстовый поток поверх двоичного потока io.BufferedIOBase. io.TextIOWrapper() наследует класс io.TextIOBase.
Поток в памяти для текстового ввода-вывода. Текстовый буфер отбрасывается при вызове метода fp.close().
Добавлено в Python 3.14. В модуль io добавлены два новых протокола статической типизации: io.Reader[T] и io.Writer[T], которые можно использовать для аннотирования функций и методов, работающих с потоками ввода/вывода
io.IOBase полезен когда нужно создать кастомный файлоподобный объект или проверить, что переданный объект поддерживает файловый интерфейс. Он позволяет единообразно работать с разными источниками данных как с файлами.
io.RawIOBase полезен для низкоуровневой работы с байтовыми потоками без буферизации. Он используется когда нужно напрямую управлять чтением/записью сырых байтов или создавать кастомные низкоуровневые IO-классы.
io.BufferedIOBase полезен для работы с буферизованными байтовыми потоками, где важна производительность при частых операциях чтения/записи. Он используется когда нужна оптимизация ввода-вывода через буферизацию данных вместо прямых низкоуровневых операций.
io.BytesIO используется для работы с байтовыми данными в памяти как с файлом. Он полезен когда нужно читать или писать байты без создания реального файла на диске, например для обработки данных в оперативной памяти.
io.FileIO представляет низкоуровневый небуферизованный доступ к файлам на уровне операционной системы. Он используется когда нужен прямой доступ к файловому дескриптору или максимальный контроль над операциями ввода-вывода без накладных расходов буферизации.
io.TextIOBase используется для работы с текстовыми потоками, обеспечивая кодирование и декодирование байтов в строки. Он полезен когда нужно единообразно обрабатывать текстовые данные из разных источников с поддержкой кодировок и переводов строк.
io.TextIOWrapper используется для оборачивания байтовых потоков в текстовый интерфейс с автоматическим кодированием/декодированием. Он полезен когда нужно преобразовать низкоуровневый байтовый поток в высокоуровневый текстовый с указанием кодировки и обработкой переводов строк.
io.StringIO используется для работы со строками в памяти как с текстовым файлом. Он полезен когда нужно читать или записывать текстовые данные без создания реального файла, сохраняя при этом все возможности файлового интерфейса для строк.