Buffer haqida bilib olamiz (Nodejs).
Assalamu Alaykum bugun dasturlarning eng asosiy qismlaridan biri bo`lgan buffer mavzusi bilan tanishamiz hamda Nodejsda u bo`yicha misollar ko`rib chiqamiz. Qani ketdik ;).
Bugungi maqolada :
- Buffer nima o`zi ?
- Buffer uchun joy ajratish.
- Buffer nimaga kerak ?
- Buffer.poolSize
shu kabi va boshqa savollarga javob olamiz.
Nodejs dokumentatsiyasida Bufferga tarif :
… binar malumotlarda iborat bo`lgan streamlarni o`qish va manipulyatsiya qilish mexanizmi.
Buffer
klasi Nodejs API larining bir qismida e’lon qilingan va TCP streamlarda hamda fayl operatsiyalardagi streamlar bilan ishlashga yordam beradi.
Buffer bu qisqa qilib aytganda kompyuter tomonidan faqat siz foydalanishingiz uchun yaratilgan joy .Nodejsda (docs) asoson shu uchun ishlatilinadigan buffer obyekti haqida aytilgan. Siz uni fayl o`qish uchun foydalanishingiz mumkin ,xohlasangiz streamlar uchun yoki boshqa ko`p narsalar uchun . Uni ustida amal bajarish imkoniyati faqat sizda yani siz yaratgan process (Nodejsda ) bo`ladi va operatsion tizim bu qismga tegmaydi .
Tepada yana binary data (binar malumotlar ) haqida ham gap ketgan bular nima desa 0 va 1 lar iborat malumot .Bilganimizdek kompyuter 0 va 1 larni tushunadi biz o`z ma’lumotlarimizni 0 va 1 larga o`tkazishimiz zarur .Biz sonlarni osongina 2 lik sanoq sistemasiga yoki qolganlariga o`tkazishimiz mumkin.Ammo string ,rasm videolarchi .Stringlar uchun o`zining encode va decode qiladigan yozuv uslublari allaqachon yaratilgan bu ASCII UNICODE va boshqalar .ASCII harflar, sonlar, belgilardan iborat bo`lib u harflarni sonlarda ifodalashga yordam beradi va bu sonlar 0va 1larga o`giriladi xuddi sonlar qayta kompyuterga berilganda ularni shu orqali yana qayta harflarga aylantira oladi .Video va Rasmlar uchun default encoderlar yo`q Nodejsda va buni qo`shimcha kutubxonalar orqali qilish mumkin.
Spoiler : Xotirangizdan ko`p buffer yaratmang yaxshilik bilan tugamaydi .
Buffer bilan ishlash
Nodejsda siz o`zingiz bemalol o`zingiz uchun buffer yaratib olishingiz mumkin .Qani unda yaratib ko`ramiz.
// A buffer faqatgina 10 bytes qabul qila oladi .
const buf1 = Buffer.alloc(10);
// malumot bilan buffer yaratish
const buf2 = Buffer.from("hello buffer");
Bufferda hajmi bytelar bilan o`lchanadi va kamida 1 byte bo`lishi mumkin va bu 8ta 0 va 1 lardan iborat. Va bularning har bittasi qaysidir belgini bildiradi .
Bufferni yaratib oldik endi unda bir necha amalarni bajarib ko`ramiz .
buf1.toJSON()
// { type: 'Buffer', data: [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }
// an empty buffer
buf2.toJSON()
// { type: 'Buffer',
data: [
104, 101, 108, 108, 111, 32, 98, 117, 102, 102, 101, 114
]
}
// the toJSON() method presents the data as the Unicode Code Points of the characters
// Examine the size of a buffer
buf1.length // 10
buf2.length // 12. Auto-assigned based on the initial content when created.
// Write to a buffer
buf1.write("Buffer really rocks!")
// Decode a buffer
buf1.toString() // 'Buffer rea'
Agarda buffer.alloc() orqali yaratilsa unga joy ajratildi hamda hamma qiymatga 0 beriladi buffer xususiyatlari arrayga o`xshab ketadi ya`ni buf1[2] orqali bufferdagi 3 elementni olish mumkin buffer.write() orqali bufferga malumotlar yo`zish mumkin agar yoziladigan malumot buffer hajmidan katta bo`lsa faqat birinchi qismi yoziladi buf1 misolida ko`rishimiz mumkin.
Tezroq Buffer yaratish
Bufferni bundan ham tezroq yaratish mumkin bunga buffer.allocUnsafe() metodini ko`rsatishimiz mumkin bu ham xuddi buffer.alloc() metodiga o`xshaydi faqatgina u yaratilganda bufferda xuddi shu joyga yozilgan malumotlar o`chirilmaydi va bu xavsizlik jihatdan yaxshi emas ya’ni buyerda kerakli malumotlar saqlangan bo`lishi mumkin.Ammo shu malumotlar o`chirilmaganligi evaziga alloc()dan tezroq ishlaydi .Bu funksiyaga o`xshash yana bir funksiya bor buffer.allocUnsafeSlow() bu tepadagi metoddan foydalangan holda hamma xotiralarni tozalab chiqadi va keyingina foydalanishga beradi .
let encBuffDefaultUtf8 = buffer.from("hello world");
console.log(encBuffDefaultUtf8); // Output: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
Buffer consolda xuddi shunday ko`rinadi va har bir son bu bufferdagi bir qism ular 16 sanoq tizimida ko`rsatiladi .
Buffer.poolsize
Yana Nodejs o`zi uchun buffer ham ochadi yani process ishga tushish jarayonida o`zi uchun 8kb buffer ochadi uni keyinchalik kerak bo`lganda osongina ishlatish uchun. Va buni buffer.poolsize orqali ko`rishingiz mumkin .Buni buffer.allocUnsafe() , buffer.concat(), buffer.from() metodlari ishlatishi mumkin agar ochiladigan joy poolsize yarmiga teng yoki undan kichik bo`lsa .Bu Nodejsga har doim buffer yaratib o`chirishni oldini olib garbage collectiondan qochib qolish imkonini beradi.
Buffer nimalar uchun ishlatilinadi ?
Buffer Nodejsda juda ko`p joylarda ishlatilinadi masalan fayl o`qish jarayonida Nodejs processi operatsion sistemaga shu faylni joyini ayatadi va menga olib kel deydi bilganingizdek kompyuterda hamma narsa 0 va 1 holatda saqlanadi va operatsion sistema xuddi shu 0 va 1larni Nodejsga olib keladi .Nodejs esa buni Buffer obyekti orqali olishi natijasida endi uni stringga yoki boshqa turga osonlikcha o`girish imkoniga ega bo`ladi .
Xuddi shu jarayon streamlarda ham kuzatiladi yani bir faylni birdaniga uzatish juda qiyin bo`lganligi uchun ular bo`limlarga bo`linadi va bo`linmalar alohida uzatiladi xuddi shu bo`linmalar buffer bo`ladi va 1 xotirani har xil bo`linmalarga ishlatishga yordam berib xotira to`lishi muammosidan yordam beradi.
Xulosa
Tepadagi ma’lumotlarga qarab buffer bu kompyuterda bir qism xotira va undan foydalanish imkoniyati faqat bizga berilganini bilib oldik.Hamda Nodejsda uni yaratishning bir necha usullarini ko`rdik alloc() xotirada yangi buffer ochadi har doim ,allocUnsafe() odatda Nodejs o`zi yaratgan bufferdan foydalanadi va eng tez usul ammo oldingi ma’lumotlar bufferda ko`rinib qoladi, allocUnsafeSlow() bu funksiya ham oldindan yaratilgan bufferdan foydalandi ammo foydalanishdan oldin hamma ma’lumotlarni o`chirib keyin ishlatishga beradi.
Umid qilamanku ushubu maqolam Buffer haqida kengroq malumot bera oladim .
Agarda maqola yoqqan bo`lsa like bosib qolganlarga ham tarqatib qo`yishingizni so`rab qolaman.
E’tiboringiz uchun rahmat !!!