Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe eines Stringstreams in C effizient in einen bestimmten Puffer schreiben?
Konfigurieren eines Streams zum Schreiben in einen bestimmten Puffer
Beim Schreiben von Daten in einen vorhandenen Puffer mithilfe der Stringstream-Klasse ist es wichtig, übermäßiges Schreiben zu vermeiden Kopieren. Der Standardmechanismus beinhaltet das Kopieren der Nachricht aus dem Stream in ein temporäres String-Objekt, was ineffizient sein kann.
Ursprünglicher Ansatz und seine Einschränkungen
Zunächst wurde ein Versuch unternommen um die Methode rdbuf()->pubsetbuf() zu verwenden, um die Stream-Ausgabe in den gewünschten Puffer umzuleiten. Diese Methode erwies sich jedoch in der Visual Studio 2008-Implementierung als unwirksam.
Benutzerdefinierte Streambuf-Implementierung
Eine praktikable Alternative besteht darin, eine benutzerdefinierte std::streambuf-Klasse zu erstellen, die ihre Klasse initialisiert interne Zeiger, die auf den bereitgestellten Puffer verweisen:
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { setp(buffer, buffer + bufferLength); } };
Revised Code Using Custom Streambuf
Mit dem benutzerdefinierten ostreambuf-Typ wird der Code wie folgt umgeschrieben:
void FillBuffer(char* buffer, unsigned int size) { ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl; }
Jetzt werden Daten ohne unnötiges Kopieren direkt in den externen Puffer geschrieben. Dieser Ansatz sorgt für mehr Effizienz und Flexibilität bei der Arbeit mit Puffern.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe eines Stringstreams in C effizient in einen bestimmten Puffer schreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!