Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich einen Eingabestream aus unveränderlichem Speicher erstellen?

Wie kann ich einen Eingabestream aus unveränderlichem Speicher erstellen?

Susan Sarandon
Susan SarandonOriginal
2024-11-09 04:47:01500Durchsuche

How can I create an input stream from immutable memory?

Konstruieren eines Eingabestroms aus unveränderlichem Speicher

In der Softwareentwicklung ist es oft notwendig, Daten aus Speicherpuffern zu lesen, ohne deren Inhalte zu kopieren oder zu ändern. Ein solches Szenario ist, wenn die Daten in einem konstanten Zeichenzeiger (const char*) gespeichert werden. Um das bequeme Lesen aus solchen Puffern zu ermöglichen, ist die Erstellung eines Eingabestreams eine praktikable Lösung.

Ein benutzerdefinierter Stream-Puffer kann die Erstellung eines Eingabestreams aus unveränderlichem Speicher erleichtern. So implementieren Sie es:

#include <streambuf>
#include <istream>

struct membuf : std::streambuf {
    membuf(char const* base, size_t size) {
        char* p(const_cast<char*&>(base));
        this->setg(p, p, p + size);
    }
};

struct imemstream : virtual membuf, std::istream {
    imemstream(char const* base, size_t size)
        : membuf(base, size), std::istream(static_cast<std::streambuf*&>(this)) {
    }
};

Der const_cast&> () im Stream-Puffer ist erforderlich, da der Stream-Puffer die Daten nicht ändert, die Schnittstelle jedoch ein Zeichen benötigt.

Sobald der Stream-Puffer erstellt wurde, können Sie ihn zum Initialisieren eines Eingabestreams verwenden und Daten aus dem Puffer lesen:

imemstream in(data, size);
int x;
float y;
std::string w;
in >> x >> y >> w;

Das obige ist der detaillierte Inhalt vonWie kann ich einen Eingabestream aus unveränderlichem Speicher erstellen?. 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