Сообщить об ошибке.

Буферизованные потоки ввода/вывода, чтение и запись

Буферизованные потоки ввода/вывода обеспечивают интерфейс более высокого уровня для устройства ввода/вывода, чем необработанный ввод/вывод.

Содержание:


class io.BytesIO([initial_bytes]):

Класс io.BytesIO реализация потока, использующая буфер байтов в памяти. Класс io.BytesIO наследует io.BufferedIOBase. Буфер отбрасывается при вызове метода close().

Необязательный аргумент initial_bytes является байтоподобным объектом, который содержит исходные данные.

Класс io.BytesIO наследует атрибуты и методы от классов io.BufferedIOBase и io.IOBase, а так же дополнительно предоставляет несколько методов.

Дополнительные методы класса io.BytesIO:

BytesIO.getbuffer():

Метод BytesIO.getbuffer() возвращает читаемое и записываемое представление содержимого буфера, не копируя его. Кроме того, изменение представления будет прозрачно обновлять содержимое буфера:

>>> import io
>>> b = io.BytesIO(b"abcdef")
>>> view = b.getbuffer()
>>> view[2:4] = b"56"
>>> b.getvalue()
# b'ab56ef'

Заметка пока существует представление, объект BytesIO не может быть изменен или закрыт.

BytesIO.getvalue():

Метод BytesIO.getvalue() возвращает bytes, содержащие все содержимое буфера.

BytesIO.read1([size]):

Метод BytesIO.read1() прочитает и вернет до размера size байтов. Если аргумент опущен или отрицателен, данные считываются и возвращаются до достижения EOF. Возвращается пустой bytes объект если поток уже находится в EOF.

Если аргумент положителен, а лежащий в основе необработанный поток не является интерактивным, может быть выдано несколько необработанных считываний для удовлетворения количества байтов (если EOF не достигнут первым). Но для интерактивных необработанных потоков будет выполнено не более одного необработанного чтения и результат меньший size не означает, что это EOF.

Возникает исключение io.BlockingIOError, если базовый необработанный поток находится в неблокирующем режиме и в данный момент не имеет доступных данных.

BytesIO.readinto1(b):

Метод BytesIO.readinto1() считывает байты в заранее выделенный, доступный для записи байтоподобный объект b и возвращает количество прочитанных байтов. Например b может быть bytearray.

Как и метод read(), в основной необработанный поток может быть выдано несколько операций чтения, если только последний не является интерактивным.

Возникает исключение io.BlockingIOError, если базовый необработанный поток находится в неблокирующем режиме и в данный момент не имеет доступных данных.


class io.BufferedReader(raw, buffer_size=DEFAULT_BUFFER_SIZE):

Класс io.BufferedReader это буфер, обеспечивающий высокоуровневый доступ к читаемому последовательному объекту io.RawIOBase. Класс io.BufferedReader наследует io.BufferedIOBase. При чтении данных из этого объекта может быть запрошен больший объем данных из базового необработанного потока, который может храниться во внутреннем буфере. Буферизованные данные могут быть затем возвращены непосредственно при последующих чтениях.

Конструктор создает io.BufferedReader для данного читаемого потока raw. Если buffer_size опущен, используется io.DEFAULT_BUFFER_SIZE.

Класс io.BufferedReader наследует атрибуты и методы от классов io.BufferedIOBase и io.IOBase, а так же дополнительно переопределяет и предоставляет несколько методов.

Дополнительные методы класса io.BufferedReader:

BufferedReader.peek([size]):

Метод BufferedReader.peek() возвращает байты из потока без продвижения позиции. Для удовлетворения вызова выполняется максимум одно чтение необработанного потока. Количество size возвращаемых байтов может быть меньше или больше запрошенного.

BufferedReader.read([size]):

Метод BufferedReader.read() читает и возвращает байты размером size или если размер size не задан или отрицательный, до тех пор, пока не встретится EOF или если вызов BufferedReader.read() не заблокируется в неблокирующем режиме.

BufferedReader.read1([size]):

Метод BufferedReader.read1() читает и возвращает байты до размера size только с одним вызовом в необработанном потоке. Если буферизован хотя бы один байт, возвращаются только буферизованные байты. В противном случае выполняется один вызов чтения необработанного потока.


class io.BufferedWriter(raw, buffer_size=DEFAULT_BUFFER_SIZE):

Класс io.BufferedWriter это буфер, обеспечивающий высокоуровневый доступ к записываемому последовательному объекту io.RawIOBase. Класс io.BufferedWriter наследует класс io.BufferedIOBase. При записи в этот объект данные обычно помещаются во внутренний буфер. Буфер будет записан в базовый io.RawIOBase объект при различных условиях, включая:

  • когда буфер становится слишком маленьким для всех ожидающих данных;
  • при вызове функции flush();
  • когда запрашивается метод seek() для объектов io.BufferedRandom (см. ниже);
  • когда объект io.BufferedWriter закрыт или уничтожен.

Конструктор создает io.BufferedWriter для данного записываемого необработанного потока raw. Если параметр buffer_size не указан, по умолчанию используется значение io.DEFAULT_BUFFER_SIZE.

Класс io.BufferedWriter наследует атрибуты и методы от классов io.BufferedIOBase и io.IOBase, а так же дополнительно переопределяет и предоставляет несколько методов.

Дополнительные методы класса io.BufferedWriter:

BufferedWriter.flush():

Метод BufferedWriter.flush() принудительно передает байты в необработанный поток raw, которые удерживаются в буфере. Если необработанный поток блокируется, то возникает исключение BlockingIOError.

BufferedWriter.write(b):

Метод BufferedWriter.read1() записывает байтоподобный объект b и возвращает количество записанных байтов. В неблокирующем режиме значение поднимается исключение BlockingIOError, если буфер должен быть записан, но необработанный поток блокируется.


class io.BufferedRandom(raw, buffer_size=DEFAULT_BUFFER_SIZE):

Класс io.BufferedRandom это буферизованный интерфейс для потоков произвольного доступа. Наследует классы io.BufferedReader и io.BufferedWriter.

Конструктор создает reader и writer для поиска необработанного потока raw, указанного в первом аргументе. Если параметр buffer_size опущен, по умолчанию используется значение io.DEFAULT_BUFFER_SIZE.

Класс io.BufferedRandom может делать все, что могут делать классы io.BufferedReader и io.BufferedWriter. Кроме того методы fp.seek() и fp.tell() гарантированно будут реализованы.


class io.BufferedRWPair(reader, writer, buffer_size=DEFAULT_BUFFER_SIZE):

Класс io.BufferedRWPair это буферизованный объект ввода-вывода, объединяющий два однонаправленных io.RawIOBase объекта - один для чтения, другой для записи - в одну двунаправленную конечную точку. Класс io.BufferedRWPair наследует io.BufferedIOBase.

reader и writer являются объектами io.RawIOBase, которые читают и пишут соответственно. Если параметр buffer_size опущен, по умолчанию используется значение io.DEFAULT_BUFFER_SIZE.

Класс io.BufferedRWPair реализует все методы io.BufferedIOBase, кроме метода detach(), который вызывает исключение UnsupportedOperation.

Предупреждение:
Класс io.BufferedRWPair не пытается синхронизировать доступ к своим базовым необработанным потокам. Вы не должны передавать его таким же объектом, как reader и writer, вместо этого используйте io.BufferedRandom.