Bolehkah Penampan Strim Tersuai Digunakan untuk Membaca Data daripada Memori Malar seolah-olah Ia Menstrim daripada Fail?

Linda Hamilton
Lepaskan: 2024-11-11 03:49:03
asal
825 orang telah melayarinya

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

Strim Input daripada Memori Malar

Masalah

Memandangkan penunjuk char* berterusan kepada rentetan ASCII, bolehkah anda mencipta penyelesaian untuk membaca data seolah-olah ia mengalir dari fail? Keperluan penting ialah data harus kekal tidak diubah suai.

Penyelesaian: Penampan Strim Tersuai

Penyelesaian terletak pada mencipta penimbal strim tersuai. Berikut ialah pelaksanaan tersuai:

#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)) {}
};
Salin selepas log masuk

Penggunaan

Dengan penimbal tersuai ini, anda boleh mencipta aliran input yang dililitkan pada data malar anda:

// 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;
Salin selepas log masuk

Pendekatan ini membolehkan anda untuk membaca daripada memori tetap tanpa mengubah data asal, tidak seperti aliran rentetan yang memerlukan penyalinan.

Atas ialah kandungan terperinci Bolehkah Penampan Strim Tersuai Digunakan untuk Membaca Data daripada Memori Malar seolah-olah Ia Menstrim daripada Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan