In diesem Programmierkontext zielen wir darauf ab, Daten mithilfe von Standard I direkt in einen vorhandenen Puffer zu schreiben /O-Streams. Lassen Sie uns untersuchen, wie Sie dies mit der pubsetbuf()-Methode erreichen können.
Die pubsetbuf()-Methode in Streambuf, der Basisklasse für Stream-Puffer in der C-Standardbibliothek ermöglicht es uns, dem Stream einen extern zugewiesenen Puffer bereitzustellen. In der Microsoft Visual Studio 2008-Implementierung der Standardbibliothek führt diese Methode jedoch keine Pufferzuweisung durch.
Um dieses Problem zu umgehen, können wir erstellen eine benutzerdefinierte Streambuf-Implementierung, die ihre internen Zeiger so initialisiert, dass sie auf den angegebenen Puffer zeigen. Hier ist ein vorlagenbasierter Streambuf, der dies erreicht:
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { // Initialize internal buffer pointers to the provided buffer setp(buffer, buffer + bufferLength); } };
Mit unserem benutzerdefinierten Streambuf können wir jetzt unseren Code so ändern, dass er direkt in den externen Puffer schreibt:
void FillBuffer(char* buffer, unsigned int size) { ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl; }
Dieser Ansatz schreibt Daten wie gewünscht ohne Zwischenkopieren effektiv in den angegebenen Puffer.
Das obige ist der detaillierte Inhalt vonWie kann ich mit C-Standard-Streams direkt in einen vom Benutzer bereitgestellten Puffer schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!