C++ oqim buferlari (std::streambuf)
C++ da bufer - bu ma'lumotlarni qayta ishlash, faylga yozish yoki tarmoq orqali yuborishdan oldin vaqtincha saqlash uchun xotira maydoni.
Buferlar vositachi bo'lib xizmat qiladi va dastur ichida va tashqi qurilmalar o'rtasida uzluksiz ma'lumotlarni uzatishni osonlashtiradi.
Samaradorlik
Buferlar tez-tez kiritish-chiqarish operatsiyalari uchun qo'shimcha xarajatlarni kamaytirishga yordam beradi. Bir vaqtning o'zida bir bayt ma'lumotni o'qish yoki yozish o'rniga (bu sekin bo'lishi mumkin), siz buferda saqlangan kattaroq ma'lumotlar bo'laklari bilan ishlashingiz mumkin.
I/U qo'ng'iroqlarini minimallashtirish
Buferlar o'qish va yozish operatsiyalari sonini kamaytiradi, bu odatda xotiradagi ma'lumotlar bilan ishlashdan ko'ra ko'proq vaqt talab qiladi.
Ma'lumotlar muvofiqligi
Buferlar ma'lumotlarning doimiy ravishda o'qilishi yoki yozilishini ta'minlaydi, xatolar ehtimolini kamaytiradi va kodingiz ishonchliligini oshiradi.
Resurslarni optimallashtirish
Buferlar dasturingizga tizim resurslaridan yaxshiroq foydalanish orqali kattaroq bloklarda ma'lumotlarni o'qish yoki yozish imkonini beradi.
Biz C++ da buferni oddiygina xotira ajratish orqali yaratishimiz mumkin:
char *buffer = new char buffer_name[buffer_size]
Bu yerga,
-*buffer - bufer manziliga ishora qiluvchi ko'rsatkich
-buffer_name - bufer nomi
-buffer_size - bufer hajmi
int yoki double kabi boshqa turdagi buferlardan ham foydalanishimiz mumkin. Biroq, char buferlari eng ko'p qo'llaniladi.
[!NOTE] Kelajakda foydalanish uchun joy bo'shatish uchun biz har doim buferni o'chirib tashlashimiz kerak. Buni
delete[]yordamida amalga oshirishimiz mumkin
#include <iostream>
using namespace std;
int main() {
// bufer hajmini aniqlang
const int buffer_size = 1024;
// belgilar buferini e'lon qilish
char *buffer = new char[buffer_size];
// foydalanuvchini kiritishni so'rang
cout << "Enter a line of text: ";
// ma'lumotlarni buferga o'qish
cin.getline(buffer, buffer_size);
// buferdan o'qilgan tarkibni ko'rsatish
cout << "You entered: " << buffer;
// dinamik ravishda ajratilgan xotirani ajrating
delete[] buffer;
return 0;
}
Chiqish
Enter a line of text: 12
You entered: 12
Bu erda biz foydalanuvchi tomonidan kiritilgan ma'lumotlarni saqlash uchun bufer yaratdik.
char *buffer = new char[buffer_size];
Buferni yaratishdan oldin biz bufer hajmini aniqlaganimizga e'tibor bering:
const int buffer_size = 1024;
Buning sababi, getline() funksiyasi uchun ajratuvchini ko'rsatish uchun bufer hajmini argument sifatida o'tkazishimiz kerak:
// ma'lumotlarni buferga o'qish
cin.getline(buffer, buffer_size);
[!NOTE] Biz
getline(cin, buffer);o‘rnigacin.getline(buffer, buffer_size);dan foydalandik, chunki bufer satr o‘zgaruvchisi emas, balki belgilar ko‘rsatkichidir.
Bufer bilan ishlashni tugatgandan so'ng, biz uni darhol o'chirib tashladik.
C++ da buferlarning bir nechta turlari mavjud bo'lib, ularning har biri ma'lum bir maqsadga xizmat qiladi:
Oqim buferlari
Ular cin va cout kabi kirish va chiqish oqimlari bilan bog'langan. Oqim buferlari ma'lumotlarni ekranda ko'rsatilishi yoki faylga yozilishidan oldin vaqtincha saqlash uchun ishlatiladi.
Fayl buferlari
Ular fayllardan o'qish yoki fayllarga yozishda ishlatiladi. Fayl buferlari dasturingiz va fayl tizimi o'rtasida ma'lumotlarni uzatishni samarali boshqarishga yordam beradi.
Belgilar buferlari
Ko'pincha C uslubidagi satrlar deb ataladigan belgilar massivlarini belgilar ketma-ketligini saqlash uchun ishlatiladigan oddiy buferlar deb hisoblash mumkin.
Maxsus buferlar
std::vector yoki std::array kabi massivlar yoki maʼlumotlar tuzilmalaridan foydalanib, oʻzingizning maxsus buferlaringizni maxsus ehtiyojlaringizga mos ravishda yaratishingiz mumkin.