Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Anda Boleh Mencipta Strim daripada Penampan Memori Malar Tanpa Mengubah Data?

Bagaimanakah Anda Boleh Mencipta Strim daripada Penampan Memori Malar Tanpa Mengubah Data?

Linda Hamilton
Linda Hamiltonasal
2024-11-09 08:15:02481semak imbas

How Can You Create a Stream from a Constant Memory Buffer Without Altering the Data?

Mencipta Strim Input daripada Memori Malar: Mengatasi Sekatan Perubahan Data

Untuk menangani masalah membaca data daripada penimbal memori malar tanpa mengubahnya, adalah perlu untuk mencipta penimbal strim tersuai. Ini boleh dicapai dengan mentakrifkan kelas yang mewarisi daripada std::streambuf standard dan mengatasi fungsinya yang berkaitan.

Secara khusus, kelas membuf yang ditakrifkan di bawah berfungsi sebagai penimbal strim:

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

Kelas ini menyediakan penimbal strim dengan penimbal data yang disediakan dan saiznya, pada asasnya mentakrifkan julat data untuk dibaca.

Untuk mencipta strim input berdasarkan penimbal ini, kami mentakrifkan kelas imemstream, yang mewarisi daripada kedua-dua membuf dan std::istream:

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

Kelas ini pada asasnya membungkus penimbal strim tersuai dan menyediakan kefungsian strim input. Kini, anda boleh menggunakan imemstream sebagai aliran input biasa:

imemstream in(data, size);
in >> value;

Dengan menggunakan teknik ini, seseorang boleh membaca data daripada penimbal memori yang berterusan seolah-olah ia datang daripada aliran, menyelesaikan masalah asal dengan berkesan sambil mengekalkan kebolehubahan data.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mencipta Strim daripada Penampan Memori Malar Tanpa Mengubah Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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