Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe eines Stringstreams in C effizient in einen bestimmten Puffer schreiben?

Wie kann ich mithilfe eines Stringstreams in C effizient in einen bestimmten Puffer schreiben?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 08:02:08310Durchsuche

How Can I Efficiently Write to a Specific Buffer Using a Stringstream in C  ?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn