Namespaces
Variants

std:: basic_streambuf

From cppreference.net
< cpp ‎ | io
Definido en el encabezado <streambuf>
template <

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

> class basic_streambuf ;

La clase basic_streambuf controla la entrada y salida a una secuencia de caracteres. Incluye y proporciona acceso a

  1. La secuencia de caracteres controlada , también llamada buffer , que puede contener secuencia de entrada (también llamada área de obtención ) para el almacenamiento en búfer de las operaciones de entrada y/o secuencia de salida (también llamada área de colocación ) para el almacenamiento en búfer de las operaciones de salida.
  2. La secuencia de caracteres asociada , también llamada fuente (para entrada) o destino (para salida). Esta puede ser una entidad a la que se accede a través de API del sistema operativo (archivo, socket TCP, puerto serial, otro dispositivo de caracteres), o puede ser un objeto ( std::vector , array , string literal ), que puede interpretarse como una fuente o destino de caracteres.

Los objetos de flujo de E/S std::basic_istream y std::basic_ostream , así como todos los objetos derivados de ellos ( std::ofstream , std::stringstream , etc.), están implementados completamente en términos de std::basic_streambuf .

La secuencia de caracteres controlada es un arreglo de CharT que, en todo momento, representa una subsecuencia, o una "ventana" hacia la secuencia de caracteres asociada. Su estado se describe mediante tres punteros:

  1. El beginning pointer , siempre apunta al elemento más bajo del buffer.
  2. El next pointer , apunta al elemento que es el siguiente candidato para lectura o escritura.
  3. El end pointer , apunta un elemento más allá del final del buffer.

Un objeto basic_streambuf puede admitir entrada (en cuyo caso el búfer descrito por los punteros de inicio, siguiente y final se denomina área de obtención ), salida ( área de inserción ), o entrada y salida simultáneamente. En este último caso, se rastrean seis punteros, que pueden apuntar todos a elementos del mismo arreglo de caracteres o a dos arreglos individuales.

Si el siguiente puntero es menor que el puntero final en el área de escritura, hay disponible una posición de escritura . El siguiente puntero puede ser desreferenciado y asignado.

Si el puntero siguiente es menor que el puntero final en el área de obtención, una posición de lectura está disponible. El puntero siguiente puede ser desreferenciado y leído.

Si el puntero siguiente es mayor que el puntero inicial en un área de obtención, una posición de reintroducción está disponible, y el puntero siguiente puede ser decrementado, desreferenciado y asignado, para reintroducir un carácter en el área de obtención.

La representación de caracteres y la codificación en la secuencia controlada pueden ser diferentes de las representaciones de caracteres en la secuencia asociada, en cuyo caso típicamente se utiliza un facet de localización std::codecvt para realizar la conversión. Ejemplos comunes son archivos UTF-8 (u otros multibyte) accedidos a través de objetos std::wfstream : la secuencia controlada consiste en caracteres wchar_t , pero la secuencia asociada consiste en bytes.

La implementación típica de la clase base std::basic_streambuf contiene únicamente los seis punteros CharT* y una copia de std::locale como miembros de datos. Adicionalmente, las implementaciones pueden mantener copias cacheadas de facetas de localización, las cuales se invalidan cada vez que se llama a imbue() . Los búferes concretos como std::basic_filebuf o std::basic_stringbuf se derivan de std::basic_streambuf .

std-streambuf.svg

Se proporcionan varios typedefs para tipos de caracteres comunes:

Definido en el encabezado <streambuf>
Tipo Definición
std::streambuf std :: basic_streambuf < char >
std::wstreambuf std :: basic_streambuf < wchar_t >

Contenidos

Tipos de miembros

Tipo de miembro Definición
char_type CharT
traits_type Traits ; el programa está mal formado si Traits::char_type no es CharT .
int_type Traits::int_type
pos_type Traits::pos_type
off_type Traits::off_type

Funciones miembro

[virtual]
destruye el objeto basic_streambuf
(función miembro pública virtual)
Locales
cambia la configuración regional asociada e invoca imbue ( )
(función miembro pública)
obtiene una copia de la configuración regional asociada
(función miembro pública)
Posicionamiento
invoca setbuf ( )
(función miembro pública)
invoca seekoff ( )
(función miembro pública)
invoca seekpos ( )
(función miembro pública)
invoca sync ( )
(función miembro pública)
Obtener área
obtiene el número de caracteres inmediatamente disponibles en el área de obtención
(función miembro pública)
avanza la secuencia de entrada, luego lee un carácter sin avanzar nuevamente
(función miembro pública)
(removed in C++17)
lee un carácter de la secuencia de entrada y avanza la secuencia
(función miembro pública)
lee un carácter de la secuencia de entrada sin avanzar la secuencia
(función miembro pública)
invoca xsgetn ( )
(función miembro pública)
Área de escritura
escribe un carácter en el área de escritura y avanza el puntero siguiente
(función miembro pública)
invoca xsputn ( )
(función miembro pública)
Putback
coloca un carácter de vuelta en la secuencia de entrada
(función miembro pública)
mueve el puntero siguiente en la secuencia de entrada hacia atrás una posición
(función miembro pública)

Funciones miembro protegidas

construye un objeto basic_streambuf
(función miembro protegida)
(C++11)
reemplaza un objeto basic_streambuf
(función miembro protegida)
(C++11)
intercambia dos objetos basic_streambuf
(función miembro protegida)
Locales
[virtual]
reacciona a un cambio de la configuración regional asociada
(función miembro protegida virtual)
Posicionamiento
[virtual]
reemplaza el búfer con un arreglo definido por el usuario, si está permitido
(función miembro protegida virtual)
[virtual]
reposiciona el siguiente puntero en la secuencia de entrada, secuencia de salida, o ambas, usando direccionamiento relativo
(función miembro protegida virtual)
[virtual]
reposiciona el siguiente puntero en la secuencia de entrada, secuencia de salida, o ambas usando direccionamiento absoluto
(función miembro protegida virtual)
[virtual]
sincroniza los búferes con la secuencia de caracteres asociada
(función miembro protegida virtual)
Obtener área
[virtual]
obtiene el número de caracteres disponibles para entrada en la secuencia de entrada asociada, si se conoce
(función miembro protegida virtual)
[virtual]
lee caracteres de la secuencia de entrada asociada al área de obtención
(función miembro protegida virtual)
[virtual]
lee caracteres de la secuencia de entrada asociada al área de obtención y avanza el siguiente puntero
(función miembro protegida virtual)
[virtual]
lee múltiples caracteres de la secuencia de entrada
(función miembro protegida virtual)
devuelve un puntero al inicio, carácter actual y el final del área de obtención
(función miembro protegida)
avanza el siguiente puntero en la secuencia de entrada
(función miembro protegida)
reposiciona los punteros de inicio, siguiente y fin de la secuencia de entrada
(función miembro protegida)
Área de escritura
[virtual]
escribe múltiples caracteres en la secuencia de salida
(función miembro protegida virtual)
[virtual]
escribe caracteres a la secuencia de salida asociada desde el área de put
(función miembro protegida virtual)
devuelve un puntero al inicio, al carácter actual y al final del área de escritura
(función miembro protegida)
avanza el puntero siguiente de la secuencia de salida
(función miembro protegida)
reposiciona los punteros de inicio, siguiente y fin de la secuencia de salida
(función miembro protegida)
Putback
[virtual]
coloca un carácter de vuelta en la secuencia de entrada, posiblemente modificando la secuencia de entrada
(función miembro protegida virtual)

Véase también

tipo de objeto, capaz de contener toda la información necesaria para controlar un flujo de E/S de C
(typedef)