Namespaces
Variants

std:: basic_streambuf

From cppreference.net
< cpp ‎ | io
Определено в заголовочном файле <streambuf>
template <

class CharT,
class Traits = std:: char_traits < CharT >

> class basic_streambuf ;

Класс basic_streambuf управляет вводом и выводом для символьной последовательности. Он включает и предоставляет доступ к

  1. Управляемая последовательность символов , также называемая буфером , которая может содержать входную последовательность (также называемую областью получения ) для буферизации операций ввода и/или выходную последовательность (также называемую областью помещения ) для буферизации операций вывода.
  2. Ассоциированная последовательность символов , также называемая источником (для ввода) или приёмником (для вывода). Это может быть сущность, доступ к которой осуществляется через API ОС (файл, TCP-сокет, последовательный порт, другое символьное устройство), или это может быть объект ( std::vector , array , string literal ), который может интерпретироваться как источник или приёмник символов.

Объекты потоков ввода-вывода std::basic_istream и std::basic_ostream , а также все объекты, производные от них ( std::ofstream , std::stringstream и т.д.), реализованы полностью на основе std::basic_streambuf .

Управляемая последовательность символов представляет собой массив CharT , который в любой момент времени представляет подпоследовательность, или "окно" в связанной последовательности символов. Её состояние описывается тремя указателями:

  1. Начальный указатель всегда указывает на самый нижний элемент буфера.
  2. Следующий указатель указывает на элемент, который является следующим кандидатом для чтения или записи.
  3. Конечный указатель указывает на позицию сразу за концом буфера.

Объект basic_streambuf может поддерживать ввод (в этом случае буфер, описываемый указателями начала, следующего и конца, называется областью получения ), вывод ( областью размещения ) или одновременный ввод и вывод. В последнем случае отслеживаются шесть указателей, которые могут указывать на элементы одного массива символов или двух отдельных массивов.

Если следующий указатель меньше конечного указателя в области вывода, доступна позиция записи . К следующему указателю можно применить операцию разыменования и присвоить значение.

Если указатель next меньше указателя end в области get, доступна позиция чтения . Указатель next может быть разыменован и из него можно прочитать данные.

Если следующий указатель больше начального указателя в области получения, доступна позиция возврата , и следующий указатель может быть уменьшен, разыменован и присвоен, чтобы вернуть символ обратно в область получения.

Представление символов и кодировка в управляемой последовательности могут отличаться от представления символов в ассоциированной последовательности, в этом случае для выполнения преобразования обычно используется фасет локали std::codecvt . Распространёнными примерами являются UTF-8 (или другие многобайтовые) файлы, доступ к которым осуществляется через объекты std::wfstream : управляемая последовательность состоит из символов wchar_t , тогда как ассоциированная последовательность состоит из байтов.

Типичная реализация базового класса std::basic_streambuf хранит только шесть указателей CharT* и копию std::locale в качестве членов данных. Кроме того, реализации могут хранить кэшированные копии фасетов локали, которые инвалидируются при каждом вызове imbue() . Конкретные буферы, такие как std::basic_filebuf или std::basic_stringbuf , являются производными от std::basic_streambuf .

std-streambuf.svg

Предоставлены несколько typedef для распространённых символьных типов:

Определено в заголовочном файле <streambuf>
Тип Определение
std::streambuf std :: basic_streambuf < char >
std::wstreambuf std :: basic_streambuf < wchar_t >

Содержание

Типы членов

Тип члена Определение
char_type CharT
traits_type Traits ; программа некорректна, если Traits::char_type не является CharT .
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

Функции-члены

[virtual]
уничтожает объект basic_streambuf
(виртуальная публичная функция-член)
Локали
изменяет связанную локаль и вызывает imbue ( )
(публичная функция-член)
получает копию связанной локали
(публичная функция-член)
Позиционирование
вызывает setbuf ( )
(публичная функция-член)
вызывает seekoff ( )
(публичная функция-член)
вызывает seekpos ( )
(публичная функция-член)
вызывает sync ( )
(публичная функция-член)
Получить площадь
получает количество символов, немедленно доступных в области получения
(публичная функция-член)
перемещает входную последовательность вперед, затем читает один символ без дальнейшего продвижения
(публичная функция-член)
(removed in C++17)
читает один символ из входной последовательности и продвигает последовательность
(публичная функция-член)
читает один символ из входной последовательности без продвижения последовательности
(public member function)
вызывает xsgetn ( )
(публичная функция-член)
Область вывода
записывает один символ в область вывода и перемещает указатель следующего символа
(публичная функция-член)
вызывает xsputn ( )
(публичная функция-член)
Возврат в поток
возвращает один символ обратно во входную последовательность
(публичная функция-член)
перемещает указатель следующего символа во входной последовательности на одну позицию назад
(публичная функция-член)

Защищенные функции-члены

создаёт объект basic_streambuf
(защищённая функция-член)
(C++11)
заменяет объект basic_streambuf
(защищённая функция-член)
(C++11)
обменивает два basic_streambuf объекта
(защищённая функция-член)
Локали
[virtual]
реагирует на изменение связанной локали
(виртуальная защищённая функция-член)
Позиционирование
[virtual]
заменяет буфер пользовательским массивом, если это разрешено
(виртуальная защищенная функция-член)
[virtual]
перемещает следующий указатель во входной последовательности, выходной последовательности или в обеих, используя относительную адресацию
(виртуальная защищенная функция-член)
[virtual]
переставляет следующий указатель во входной последовательности, выходной последовательности или в обеих, используя абсолютную адресацию
(виртуальная защищённая функция-член)
[virtual]
синхронизирует буферы с ассоциированной последовательностью символов
(виртуальная защищённая функция-член)
Получить площадь
[virtual]
получает количество символов, доступных для чтения в связанной входной последовательности, если известно
(виртуальная защищённая функция-член)
[virtual]
читает символы из связанной входной последовательности в область получения
(виртуальная защищенная функция-член)
[virtual]
читает символы из связанной входной последовательности в область получения и перемещает указатель следующего символа
(виртуальная защищённая функция-член)
[virtual]
читает несколько символов из входной последовательности
(виртуальная защищенная функция-член)
возвращает указатель на начало, текущий символ и конец области чтения
(защищённая функция-член)
перемещает указатель следующего элемента во входной последовательности
(защищённая функция-член)
переставляет указатели начала, следующего и конца входной последовательности
(защищенная функция-член)
Область ввода
[virtual]
записывает несколько символов в выходную последовательность
(виртуальная защищённая функция-член)
[virtual]
записывает символы в связанную выходную последовательность из области вывода
(виртуальная защищенная функция-член)
возвращает указатель на начало, текущий символ и конец области вывода
(защищённая функция-член)
перемещает указатель следующего элемента выходной последовательности
(защищённая функция-член)
переставляет указатели начала, следующего элемента и конца выходной последовательности
(защищенная функция-член)
Возврат (Putback)
[virtual]
возвращает символ обратно во входную последовательность, возможно изменяя входную последовательность
(виртуальная защищённая функция-член)

Смотрите также

тип объекта, способный хранить всю информацию, необходимую для управления потоком ввода-вывода в C
(typedef)