Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mencipta Strim Input daripada Memori Malar dalam C?
Mencipta Strim Input daripada Memori Malar
Untuk membaca data daripada penimbal memori malar seolah-olah ia adalah strim, penimbal strim tersuai boleh dibuat. Penampan ini akan merujuk lokasi memori malar tanpa mengubah suai kandungannya.
Pelaksanaan:
Kod berikut mentakrifkan penimbal strim, membuf dan strim input, imemstream, menggunakan penimbal membuf:
#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)) { } };
Dalam kod ini, membuf dimulakan dengan penunjuk char dan saiz data yang tetap. Ia menyediakan penimbal input (setg) untuk menunjuk kepada data ini. imemstream mewarisi daripada kedua-dua membuf dan std::istream, dengan berkesan membalut memori malar dalam aliran input.
Penggunaan:
Untuk menggunakan imemstream, buat seketika dengan penuding dan saiz memori malar:
imemstream in(data, size);
Data kemudiannya boleh dibaca dari strim seperti biasa:
in >> x >> y >> w;
Nota: Const_cast adalah perlu kerana std: :streambuf::setg memerlukan penunjuk char bukan const. Walaupun penimbal strim tidak akan mengubah suai data, antara muka memerlukan jenis ini untuk fleksibiliti dalam penimbal strim "biasa".
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Strim Input daripada Memori Malar dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!