Skip to content

JavaScript DataView

DataView — bu ArrayBuffer-dagi binar ma'lumotlarni istalgan formatda (Int8, Uint16, Float32 va h.k.) va istalgan baytlar tartibida (Endianness) o'qish va yozish imkonini beruvchi quyi darajali obyektdir.


Moslashuvchan interfeys

Tiplangan massivlar (masalan, Uint8Array) butun massiv uchun bitta turni talab qilsa, DataView bir vaqtning o'zida har xil turlarni bitta bufer ichida ishlatishga imkon beradi.


Nima uchun DataView kerak?

DataView quyidagi holatlarda eng yaxshi tanlov hisoblanadi:

  1. Turli tiplar aralashgan bo'lsa: Masalan, bitta faylning boshi Uint16 (identifikator), keyin Float32 (qiymat), so'ngra Int8 (bayroq) bo'lishi mumkin.
  2. Baytlar tartibini boshqarish: Turli qurilmalar sonlarni turlicha saqlaydi (Little-endian vs Big-endian). DataView buni aniq belgilashga imkon beradi.

DataView yaratish

DataView yaratish uchun sizga tayyor ArrayBuffer kerak bo'ladi:

js
const buffer = new ArrayBuffer(16) // 16 baytli bufer
const view = new DataView(buffer)

// Faqat ma'lum bir qismi uchun yaratish (4-baytdan 8 bayt uzunlikda)
const subView = new DataView(buffer, 4, 8)

O'qish va yozish metodlari

DataView-da har bir ma'lumot turi uchun alohida get (o'qish) va set (yozish) metodlari mavjud:

js
const buffer = new ArrayBuffer(8)
const view = new DataView(buffer)

// Yozish: offset (nechanchi bayt), qiymat
view.setInt32(0, 123456)
view.setUint8(4, 255)

// O'qish: offset
const val1 = view.getInt32(0)
const val2 = view.getUint8(4)

Baytlar tartibi (Endianness)

Numbers 1 baytdan ortiq joy egallaganda (masalan, 16-bit, 32-bit), baytlar qaysi tartibda joylashishi muhim:

  • Little-endian: Eng kichik bayt birinchi keladi (ko'pgina shaxsiy kompyuterlarda shunday).
  • Big-endian: Eng katta bayt birinchi keladi (ko'p tarmoq protokollarida ishlatiladi).

DataView metodlarining oxirgi argumenti bu tartibni belgilaydi:

  • true — Little-endian.
  • false (yoki yozilmasa) — Big-endian.
js
view.setUint16(0, 500, true) // Little-endian tartibida yozish
const value = view.getUint16(0, true) // Little-endian tartibida o'qish

DataView metodlari jadvali

MetodTavsifiBaytlar soni
getInt8 / setInt88-bit ishorali butun son1
getUint8 / setUint88-bit ishorasiz butun son1
getInt16 / setInt1616-bit ishorali butun son2
getUint16 / setUint1616-bit ishorasiz butun son2
getInt32 / setInt3232-bit ishorali butun son4
getFloat32 / setFloat3232-bit haqiqiy son4
getFloat64 / setFloat6464-bit haqiqiy son8
getBigInt64 / setBigInt6464-bit BigInt son8

Foydali maslahat

Agar siz tarmoq protokoli yoki maxsus fayl formati (masalan, .wav yoki .png) bilan ishlayotgan bo'lsangiz, har gal baytlar tartibini (endianness) hujjatdan tekshiring va DataView-da to'g'ri ishlating.