std:: basic_streambuf
|
Definido en el encabezado
<streambuf>
|
||
|
template
<
class
CharT,
|
||
La clase
basic_streambuf
controla la entrada y salida a una secuencia de caracteres. Incluye y proporciona acceso a
- 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.
- 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:
- El beginning pointer , siempre apunta al elemento más bajo del buffer.
- El next pointer , apunta al elemento que es el siguiente candidato para lectura o escritura.
- 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
.
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) |