JavaScript ArrayBuffer — сирі двійкові дані
ArrayBuffer — блок сирої двійкової пам'яті фіксованого розміру. Сам по собі він нечитабельний: це просто байти.
Загальний опис
Щоб щось зробити з буфером, потрібне вікно в нього — типізований масив (Uint8Array, Float32Array) або DataView. Буфер зберігає байти, вікно каже, як їх тлумачити.
Один і той самий буфер можна дивитись різними вікнами одночасно — і вони бачитимуть ті самі байти. Зміна через одне вікно миттєво видима в іншому: копіювання не відбувається.
Зустрічається скрізь, де є справжні двійкові дані: файли (FileReader, fetch().arrayBuffer()), WebSocket, WebGL, аудіо, криптографія.
- Нотатка
-
Розмір буфера фіксований з моменту створення. «Дописати в кінець» не можна — треба створити більший буфер і скопіювати.
автор: NagarD
Синтаксис
const buf = new ArrayBuffer(16);
властивості
| Властивість | Опис |
|---|---|
| byteLength | Розмір буфера в байтах. |
методи
| Метод | Опис |
|---|---|
| slice | Копіює діапазон у новий буфер. |
| isView | Чи є аргумент представленням буфера (TypedArray або DataView). |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| ArrayBuffer | 7+ | 4+ | 5.1+ | 11.6+ | 12+ | 10+ |
| Переглядач | ||||
|---|---|---|---|---|
| ArrayBuffer | 4+ | yes | yes | 4.2+ |
Приклади
+ запропонувати свій приклад у пісочниці
Одна пам'ять, два різні вікна в неї.
(async () => {
const buffer = new ArrayBuffer(4); // 4 байти
const bytes = new Uint8Array(buffer);
bytes[0] = 255;
bytes[1] = 1;
// інше вікно в ТУ САМУ пам'ять
const asInt = new Uint32Array(buffer);
console.log(asInt[0]); // 511 — ті самі байти, інше тлумачення
// типовий шлях: файл із мережі
try {
const response = await fetch('/img/logo.svg');
const data = new Uint8Array(await response.arrayBuffer());
console.log(data.length, 'байтів');
} catch (error) {
console.log('Файл недоступний:', error.message);
}
})();
Коментарі
Коментарів ще немає — будьте першим!