Namensräume
Varianten
Aktionen

std::basic_streambuf

Von cppreference.com
< cpp‎ | io
 
 
 
 
Definiert in Header <streambuf>
template<

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

> class basic_streambuf;

Die Klasse basic_streambuf steuert die Eingabe und Ausgabe einer Zeichensequenz. Sie enthält und stellt Zugriff auf

  1. Die gesteuerte Zeichensequenz, auch als Puffer bezeichnet, welche eine Eingabesequenz (auch als Get-Bereich bezeichnet) zur Pufferung von Eingabeoperationen und/oder eine Ausgabesequenz (auch als Put-Bereich bezeichnet) zur Pufferung von Ausgabeoperationen enthalten kann.
  2. Die assoziierte Zeichensequenz, auch als Quelle (für Eingabe) oder Senke (für Ausgabe) bezeichnet. Dies kann eine Entität sein, auf die über eine Betriebssystem-API (Datei, TCP-Socket, serielle Schnittstelle, anderes Zeichengerät) zugegriffen wird, oder es kann ein Objekt sein (std::vector, Array, String-Literal), das als Zeichenquelle oder -senke interpretiert werden kann.

Die I/O-Stream-Objekte std::basic_istream und std::basic_ostream sowie alle von ihnen abgeleiteten Objekte (std::ofstream, std::stringstream usw.) werden vollständig auf Basis von std::basic_streambuf implementiert.

Die gesteuerte Zeichensequenz ist ein Array von CharT, das jederzeit eine Teilsequenz oder ein "Fenster" in die assoziierte Zeichensequenz darstellt. Sein Zustand wird durch drei Zeiger beschrieben

  1. Der Anfangszeiger zeigt immer auf das unterste Element des Puffers.
  2. Der Nächstzeiger zeigt auf das Element, das der nächste Kandidat für Lesen oder Schreiben ist.
  3. Der Endzeiger zeigt auf eine Position hinter dem Ende des Puffers.

Ein basic_streambuf-Objekt kann Eingabe (in diesem Fall wird der durch die Anfangs-, Nächste- und Endzeiger beschriebene Puffer als Get-Bereich bezeichnet), Ausgabe (Put-Bereich) oder gleichzeitig Eingabe und Ausgabe unterstützen. In letzterem Fall werden sechs Zeiger verwaltet, die alle auf Elemente desselben Zeichenarrays oder auf zwei einzelne Arrays zeigen können.

Wenn der Nächste-Zeiger im Put-Bereich kleiner als der Endzeiger ist, ist eine Schreibposition verfügbar. Der Nächste-Zeiger kann dereferenziert und zugewiesen werden.

Wenn der Nächste-Zeiger im Get-Bereich kleiner als der Endzeiger ist, ist eine Leseposition verfügbar. Der Nächste-Zeiger kann dereferenziert und gelesen werden.

Wenn der Nächste-Zeiger in einem Get-Bereich größer als der Anfangszeiger ist, ist eine Putback-Position verfügbar, und der Nächste-Zeiger kann dekrementiert, dereferenziert und zugewiesen werden, um ein Zeichen in den Get-Bereich zurückzulegen.

Die Zeichenrepräsentation und Kodierung in der gesteuerten Sequenz kann sich von den Zeichenrepräsentationen in der assoziierten Sequenz unterscheiden. In diesem Fall wird typischerweise eine std::codecvt Locale Facette verwendet, um die Konvertierung durchzuführen. Gängige Beispiele sind UTF-8-Dateien (oder andere Multibyte-Dateien), auf die über std::wfstream-Objekte zugegriffen wird: Die gesteuerte Sequenz besteht aus wchar_t-Zeichen, aber die assoziierte Sequenz besteht aus Bytes.

Die typische Implementierung der Basisklasse std::basic_streambuf enthält nur die sechs CharT*-Zeiger und eine Kopie von std::locale als Datenmember. Zusätzlich können Implementierungen zwischengespeicherte Kopien von Locale Facetten enthalten, die ungültig werden, wenn imbue() aufgerufen wird. Die konkreten Puffer wie std::basic_filebuf oder std::basic_stringbuf leiten sich von std::basic_streambuf ab.

std-streambuf.svg

Mehrere Typedefs für gängige Zeichentypen werden bereitgestellt

Definiert in Header <streambuf>
Typ Definition
std::streambuf std::basic_streambuf<char>
std::wstreambuf std::basic_streambuf<wchar_t>

Inhalt

[bearbeiten] Member-Typen

Mitgliedertyp Definition
char_type CharT[bearbeiten]
traits_type Traits; das Programm ist fehlerhaft, wenn Traits::char_type nicht CharT ist.[bearbeiten]
int_type Traits::int_type[bearbeiten]
pos_type Traits::pos_type[bearbeiten]
off_type Traits::off_type[bearbeiten]

[bearbeiten] Memberfunktionen

[virtuell]
zerstört das basic_streambuf-Objekt
(virtuelle öffentliche Memberfunktion) [bearbeiten]
Lokale
ändert die zugeordnete Locale und ruft imbue() auf
(öffentliche Memberfunktion) [bearbeiten]
holt eine Kopie der zugeordneten Locale
(öffentliche Memberfunktion) [bearbeiten]
Positionierung
ruft setbuf() auf
(öffentliche Memberfunktion) [bearbeiten]
ruft seekoff() auf
(öffentliche Memberfunktion) [bearbeiten]
ruft seekpos() auf
(öffentliche Memberfunktion) [bearbeiten]
ruft sync() auf
(öffentliche Memberfunktion) [bearbeiten]
Get-Bereich
holt die Anzahl der im Get-Bereich sofort verfügbaren Zeichen
(öffentliche Memberfunktion) [bearbeiten]
bewegt die Eingabesequenz vorwärts und liest dann ein Zeichen, ohne erneut vorzurücken
(öffentliche Memberfunktion) [bearbeiten]
(in C++17 entfernt)
liest ein Zeichen aus der Eingabesequenz und rückt die Sequenz vor
(öffentliche Memberfunktion) [bearbeiten]
liest ein Zeichen aus der Eingabesequenz, ohne die Sequenz vorzurücken
(öffentliche Memberfunktion) [bearbeiten]
ruft xsgetn() auf
(öffentliche Memberfunktion) [bearbeiten]
Put-Bereich
schreibt ein Zeichen in den Put-Bereich und rückt den nächsten Zeiger vor
(öffentliche Memberfunktion) [bearbeiten]
ruft xsputn() auf
(öffentliche Memberfunktion) [bearbeiten]
Putback
legt ein Zeichen zurück in die Eingabesequenz
(öffentliche Memberfunktion) [bearbeiten]
verschiebt den nächsten Zeiger in der Eingabesequenz um eins zurück
(öffentliche Memberfunktion) [bearbeiten]

Geschützte Memberfunktionen

konstruiert ein basic_streambuf-Objekt
(geschützte Member-Funktion) [bearbeiten]
(C++11)
ersetzt ein basic_streambuf-Objekt
(geschützte Member-Funktion) [bearbeiten]
(C++11)
tauscht zwei basic_streambuf-Objekte
(geschützte Member-Funktion) [bearbeiten]
Lokale
[virtuell]
reagiert auf eine Änderung der zugeordneten Locale
(virtuelle geschützte Memberfunktion) [bearbeiten]
Positionierung
[virtuell]
ersetzt den Puffer durch ein benutzerdefiniertes Array, falls zulässig
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung relativer Adressierung
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung absoluter Adressierung
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
synchronisiert die Puffer mit der zugeordneten Zeichensequenz
(virtuelle geschützte Memberfunktion) [bearbeiten]
Get-Bereich
[virtuell]
holt die Anzahl der für die Eingabe in der zugeordneten Eingabesequenz verfügbaren Zeichen, falls bekannt
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
liest Zeichen aus der zugeordneten Eingabesequenz in den Get-Bereich
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
liest Zeichen aus der zugeordneten Eingabesequenz in den Get-Bereich und rückt den nächsten Zeiger vor
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
liest mehrere Zeichen aus der Eingabesequenz
(virtuelle geschützte Memberfunktion) [bearbeiten]
gibt einen Zeiger auf den Anfang, das aktuelle Zeichen und das Ende des Get-Bereichs zurück
(geschützte Member-Funktion) [bearbeiten]
rückt den nächsten Zeiger in der Eingabesequenz vor
(geschützte Member-Funktion) [bearbeiten]
positioniert die Zeiger für Anfang, nächsten und Ende der Eingabesequenz neu
(geschützte Member-Funktion) [bearbeiten]
Put-Bereich
[virtuell]
schreibt mehrere Zeichen in die Ausgabesequenz
(virtuelle geschützte Memberfunktion) [bearbeiten]
[virtuell]
schreibt Zeichen aus dem Put-Bereich in die zugeordnete Ausgabesequenz
(virtuelle geschützte Memberfunktion) [bearbeiten]
gibt einen Zeiger auf den Anfang, das aktuelle Zeichen und das Ende des Put-Bereichs zurück
(geschützte Member-Funktion) [bearbeiten]
rückt den nächsten Zeiger der Ausgabesequenz vor
(geschützte Member-Funktion) [bearbeiten]
positioniert die Zeiger für Anfang, nächsten und Ende der Ausgabesequenz neu
(geschützte Member-Funktion) [bearbeiten]
Putback
[virtuell]
legt ein Zeichen in die Eingabesequenz zurück, möglicherweise unter Änderung der Eingabesequenz
(virtuelle geschützte Memberfunktion) [bearbeiten]

[bearbeiten] Siehe auch

Objekttyp, der alle für die Steuerung eines C-I/O-Streams benötigten Informationen speichern kann
(typedef) [bearbeiten]