ホームページ >バックエンド開発 >C++ >カスタム ストリーム バッファーを使用して、ファイルからストリーミングしているかのように定数メモリからデータを読み取ることはできますか?

カスタム ストリーム バッファーを使用して、ファイルからストリーミングしているかのように定数メモリからデータを読み取ることはできますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-11 03:49:03882ブラウズ

Can a Custom Stream Buffer Be Used to Read Data from Constant Memory as if It Were Streaming from a File?

定数メモリからの入力ストリーム

問題

ASCII 文字列への定数 char* ポインタが与えられた場合、データを読み取る解決策を考案できますかファイルからストリーミングしているかのように?重要な要件は、データが変更されないことです。

解決策: カスタム ストリーム バッファ

解決策は、カスタム ストリーム バッファを作成することです。カスタム実装は次のとおりです。

#include <streambuf>
#include <istream>

struct membuf: std::streambuf {
    membuf(char const* base, size_t size) {
        char* p(const_cast<char*>(base));  // Casting for interface compatibility
        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)) {}
};

使用法

このカスタム バッファーを使用すると、定数データをラップした入力ストリームを作成できます。

// data points to a string "42 3.14 blah"
imemstream in(data, data_size);
int x;
float y;
std::string w;
in >> x >> y >> w;

このアプローチにより、次のことが可能になります。コピーが必要な文字列ストリームとは異なり、元のデータを変更することなく定数メモリから読み取ることができます。

以上がカスタム ストリーム バッファーを使用して、ファイルからストリーミングしているかのように定数メモリからデータを読み取ることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。