Maison  >  Article  >  développement back-end  >  Comment puis-je créer un flux d’entrée à partir d’une mémoire immuable ?

Comment puis-je créer un flux d’entrée à partir d’une mémoire immuable ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-09 04:47:01499parcourir

How can I create an input stream from immutable memory?

Construire un flux d'entrée à partir d'une mémoire immuable

Dans le développement de logiciels, il est souvent nécessaire de lire des données à partir de tampons de mémoire sans copier ni modifier leur contenu. Un de ces scénarios est celui où les données sont stockées dans un pointeur de caractère constant (const char*). Pour permettre une lecture pratique à partir de tels tampons, la création d'un flux d'entrée est une solution viable.

Un tampon de flux personnalisé peut faciliter la création d'un flux d'entrée à partir d'une mémoire immuable. Voici comment l'implémenter :

#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)) {
    }
};

Le const_cast&> () dans le tampon de flux est nécessaire car le tampon de flux ne modifie pas les données, mais l'interface nécessite un char.

Une fois le tampon de flux créé, vous pouvez l'utiliser pour initialiser un flux d'entrée et lisez les données du tampon :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn