std:: basic_streambuf
|
Определено в заголовочном файле
<streambuf>
|
||
|
template
<
class
CharT,
|
||
Класс
basic_streambuf
управляет вводом и выводом для символьной последовательности. Он включает и предоставляет доступ к
- Управляемая последовательность символов , также называемая буфером , которая может содержать входную последовательность (также называемую областью получения ) для буферизации операций ввода и/или выходную последовательность (также называемую областью помещения ) для буферизации операций вывода.
- Ассоциированная последовательность символов , также называемая источником (для ввода) или приёмником (для вывода). Это может быть сущность, доступ к которой осуществляется через API ОС (файл, TCP-сокет, последовательный порт, другое символьное устройство), или это может быть объект ( std::vector , array , string literal ), который может интерпретироваться как источник или приёмник символов.
Объекты потоков ввода-вывода
std::basic_istream
и
std::basic_ostream
, а также все объекты, производные от них (
std::ofstream
,
std::stringstream
и т.д.), реализованы полностью на основе
std::basic_streambuf
.
Управляемая последовательность символов представляет собой массив
CharT
, который в любой момент времени представляет подпоследовательность, или "окно" в связанной последовательности символов. Её состояние описывается тремя указателями:
- Начальный указатель всегда указывает на самый нижний элемент буфера.
- Следующий указатель указывает на элемент, который является следующим кандидатом для чтения или записи.
- Конечный указатель указывает на позицию сразу за концом буфера.
Объект
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
.
Предоставлены несколько 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) |