Skip to content

JavaScript ArrayBuffer

ArrayBuffer — bu xotiraning ma'lum bir o'lchamdagi qismi (blok). U binar ma'lumotlarni saqlash uchun poydevor vazifasini o'taydi.


Xotira bloki

ArrayBuffer — bu shunchaki baytlar to'plami. Uning ichidagi ma'lumotlarni to'g'ridan-to'g'ri o'qib bo'lmaydi. Uni o'qish uchun har doim "ko'rinish" (view) kerak bo'ladi.


ArrayBuffer yaratish

ArrayBuffer yaratishda uning hajmi baytlarda ko'rsatiladi:

js
// 16 baytlik xotira maydoni yaratish
const myBuf = new ArrayBuffer(16)

// Hajmini tekshirish
console.log(myBuf.byteLength) // 16

Muhim qoidalar

  1. Hajmi o'zgarmas: ArrayBuffer yaratilgandan so'ng uning hajmini o'zgartirib bo'lmaydi.
  2. To'g'ridan-to'g'ri foydalanib bo'lmaydi: myBuf[0] deb qiymat yozib yoki o'qib bo'lmaydi. Buning uchun Typed Array yoki DataView kerak. :::

ArrayBuffer-dan foydalanish

Xotira blokidagi ma'lumotlarni boshqarish uchun uning ustiga "niqob" yoki "ko'rinish" (view) kiydirishimiz kerak:

js
const buffer = new ArrayBuffer(8) // 8 bayt

// 1. Uint8Array orqali (har bir element 1 bayt)
const view8 = new Uint8Array(buffer) // Maksimal 8 ta son
view8[0] = 255

// 2. Int32Array orqali (har bir element 4 bayt)
const view32 = new Int32Array(buffer) // Maksimal 2 ta son
view32[0] = 100000

ArrayBuffer-ni nusxalash (Slice)

Massivlardagi kabi, xotira blokining bir qismini slice() metodidan foydalanib nusxalab olish mumkin:

js
const buffer = new ArrayBuffer(16)
const sliced = buffer.slice(4, 12) // 4-baytdan 12-baytgacha nusxa oladi

console.log(sliced.byteLength) // 8

NOTE

slice() metodi har doim yangi xotira bloki yaratadi va ma'lumotlarni nusxalaydi. Ular bir-biriga bog'liq bo'lmaydi.


SharedArrayBuffer

Oddiy ArrayBuffer bitta oqimda (thread) ishlaydi. Agar siz ma'lumotlarni kodingizning turli qismlari (masalan, Web Workers) o'rtasida bir vaqtda ishlatmoqchi bo'lsangiz, SharedArrayBuffer-dan foydalanishingiz kerak.

CAUTION

Xavfsizlik sababli (Spectre/Meltdown hujumlari), SharedArrayBuffer barcha saytlarda ham ishlamasligi mumkin. Buning uchun maxsus HTTP sarlavhalari (COOP/COEP) talab qilinadi.


Xulosa

  • ArrayBuffer: Faqat xotira bloki, unga to'g'ridan-to'g'ri yozib bo'lmaydi.
  • View (Ko'rinish): Xotirani qanday talqin qilishni belgilaydi (Typed Array yoki DataView).
  • Hajmi: Baytlarda o'lchanadi va o'zgarmasdir.

Keyingi qadam

Xotira blokidagi turli xil ma'lumotlarni (masalan, ham son, ham matn) bitta joyda boshqarishni o'rganish uchun DataView darsiga o'ting.