import io fp = io.BufferedIOBase()
Базовый класс io.BufferedIOBase
предназначен для двоичных потоков, которые поддерживают некоторую буферизацию. Класс io.BufferedIOBase
наследует абстрактный класс io.IOBase
. Не имеет публичного конструктора.
Основное отличие базового класса io.RawIOBase
от класса io.BufferedIOBase
заключается в том, что методы io.BufferedIOBase
, такие как BufferedIOBase.read()
, BufferedIOBase.readinto()
и BufferedIOBase.write()
будут пытаться прочитать столько входных данных, сколько требуется или потреблять все заданные выходные данные за счет выполнения более одного системного вызова.
Кроме того, эти методы могут вызвать исключение io.BlockingIOError
, если базовый необработанный поток находится в неблокирующем режиме и не может принимать или давать достаточно данных, в отличие от своих аналогов класса io.RawIOBase
, которые никогда не вернут None
.
Кроме того, метод BufferedIOBase.read()
не имеет реализации по умолчанию, которая откладывает BufferedIOBase.readinto()
.
Типичная реализация io.BufferedIOBase
не должна наследовать от реализации io.RawIOBase
, но обернуть ее, как это делают io.BufferedWriter
и io.BufferedReader
.
Базовый класс io.BufferedIOBase
наследует атрибуты и методы из класса io.IOBase
, а так же дополнительно предоставляет несколько методов.
io.BufferedIOBase
:BufferedIOBase.raw
:Метод BufferedIOBase.raw
это основной исходный поток - экземпляр io.RawIOBase
, с которым имеет дело io.BufferedIOBase
. Метод fp.raw
не является частью API класса io.BufferedIOBase
и может не существовать в некоторых реализациях.
BufferedIOBase.detach()
:Метод BufferedIOBase.detach()
отделяет исходный поток от буфера и возвращает его. После отделения необработанного потока, буфер находится в непригодном для использования состоянии.
Некоторые буферы, например io.BytesIO
, не имеют концепции единственного необработанного потока для возврата его из этого метода. Они поднимают исключение UnsupportedOperation
.
BufferedIOBase.read(size=-1)
:Метод BufferedIOBase.read()
прочитает и вернет до размера size
байтов. Если аргумент опущен или отрицателен, данные считываются и возвращаются до достижения EOF. Возвращается пустой bytes объект если поток уже находится в EOF.
Если аргумент положителен, а лежащий в основе необработанный поток не является интерактивным, может быть выдано несколько необработанных считываний для удовлетворения количества байтов (если EOF не достигнут первым). Но для интерактивных необработанных потоков будет выполнено не более одного необработанного чтения и результат меньший size
не означает, что это EOF.
Возникает исключение io.BlockingIOError
, если базовый необработанный поток находится в неблокирующем режиме и в данный момент не имеет доступных данных.
BufferedIOBase.read1([size])
:Метод BufferedIOBase.read1()
читает и возвращает до size
байтов, с не более чем одним вызовом метода read()
или readinto()
основного потока . Это может быть полезно, если вы реализуете свою собственную буферизацию поверх объекта io.BufferedIOBase
.
Если size=-1
- по умолчанию, то возвращается произвольное количество байт, обычно больше нуля, если не достигнут EOF.
BufferedIOBase.readinto(b)
:Метод BufferedIOBase.readinto()
считывает байты в заранее выделенный, доступный для записи байтоподобный объект b
и возвращает количество прочитанных байтов. Например b
может быть bytearray
.
Как и метод read()
, в основной необработанный поток может быть выдано несколько операций чтения, если только последний не является интерактивным.
Возникает исключение io.BlockingIOError
, если базовый необработанный поток находится в неблокирующем режиме и в данный момент не имеет доступных данных.
BufferedIOBase.readinto1(b)
:Метод BufferedIOBase.readinto1()
считывает байты в предварительно выделенный, записываемый байтоподобный объект b
, используя не более одного вызова метода read()
или readinto()
базового необработанного потока и возвращает количество прочитанных байтов.
Возникает исключение io.BlockingIOError
, если базовый необработанный поток находится в неблокирующем режиме и в данный момент не имеет доступных данных.
BufferedIOBase.write(b)
:Метод BufferedIOBase.write()
записывает данные байтоподобный объект b
и возвращает количество записанных байтов, которое всегда равно длине b
в байтах. Если запись не удается поднимается исключение OSError
. В зависимости от фактической реализации эти байты могут быть легко записаны в базовый поток или храниться в буфере по соображениям производительности.
В неблокирующем режиме вызывается исключение io.BlockingIOError
, если данные необходимо было записать в необработанный поток, но он не может принять все данные без блокировки.
Вызывающая сторона может очистить или изменить объект b
после возврата этого метода, поэтому реализация должна иметь доступ только к объекту b
во время вызова метода.