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:
- Turli tiplar aralashgan bo'lsa: Masalan, bitta faylning boshi
Uint16(identifikator), keyinFloat32(qiymat), so'ngraInt8(bayroq) bo'lishi mumkin. - 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:
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:
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.
view.setUint16(0, 500, true) // Little-endian tartibida yozish
const value = view.getUint16(0, true) // Little-endian tartibida o'qishDataView metodlari jadvali
| Metod | Tavsifi | Baytlar soni |
|---|---|---|
getInt8 / setInt8 | 8-bit ishorali butun son | 1 |
getUint8 / setUint8 | 8-bit ishorasiz butun son | 1 |
getInt16 / setInt16 | 16-bit ishorali butun son | 2 |
getUint16 / setUint16 | 16-bit ishorasiz butun son | 2 |
getInt32 / setInt32 | 32-bit ishorali butun son | 4 |
getFloat32 / setFloat32 | 32-bit haqiqiy son | 4 |
getFloat64 / setFloat64 | 64-bit haqiqiy son | 8 |
getBigInt64 / setBigInt64 | 64-bit BigInt son | 8 |
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.
