Skip to main content

Buffer проти масиву

1. Як створити новий Buffer

У Node.js є кілька способів створити буфер:

Buffer.from()

Створює буфер з наявних даних (рядка, масиву байтів, іншого буфера):

javascript
const buf1 = Buffer.from('Hello', 'utf8'); // з рядка const buf2 = Buffer.from([72, 101, 108, 108, 111]); // з масиву чисел

Buffer.alloc(size)

Створює новий буфер заданого розміру, заповнений нулями:

javascript
const buf3 = Buffer.alloc(10); // 10 байт, усі 0

Безпечний спосіб - очищає пам'ять перед використанням.

Buffer.allocUnsafe(size)

Створює буфер потрібного розміру, але без обнулення пам'яті (може містити "сміття" від попередніх даних у пам'яті):

javascript
const buf4 = Buffer.allocUnsafe(10);

Використовується, якщо потрібна максимальна швидкість, і ти точно будеш записувати всі байти вручну.

Buffer.concat(list)

Об'єднує кілька буферів в один:

javascript
const part1 = Buffer.from('Hello '); const part2 = Buffer.from('World'); const buf = Buffer.concat([part1, part2]); console.log(buf.toString()); // "Hello World"

2. Чим Buffer відрізняється від звичайного масиву

КритерійBufferArray
Тип данихЗберігає байти (числа 0-255)Може зберігати будь-які значення (числа, рядки, об'єкти тощо)
РозмірФіксований - не можна змінити довжину після створенняДинамічний - можна додавати й видаляти елементи
ПродуктивністьПрацює на рівні C++, дуже швидко для бінарних операційПовільніше, оскільки реалізований на рівні JS
ПризначенняДля бінарних даних (файли, мережа, потоки)Для логічних даних і структур у JS
Пам'ятьРозташовується в некерованій пам'яті (поза V8 heap)Зберігається в керованій пам'яті V8
КодуванняПідтримує читання/запис рядків у різних кодуваннях (utf8, hex, base64)Не підтримує кодування напряму
МетодиМає низькорівневі методи (readUInt8, writeUInt16LE, slice, toString)Звичайні методи масиву (map, forEach, push)

Приклад відмінностей:

javascript
const arr = [72, 101, 108, 108, 111]; const buf = Buffer.from(arr); console.log(arr); // [72, 101, 108, 108, 111] console.log(buf); // <Buffer 48 65 6c 6c 6f> console.log(arr.map(x => String.fromCharCode(x)).join('')); // "Hello" console.log(buf.toString('utf8')); // "Hello"

Обидва зберігають однакові числа, але Buffer - оптимізований під роботу з байтами, а Array - для логіки на рівні JS.

Підсумок

Buffer - це спеціальний тип для зберігання й обробки бінарних даних, створюється через Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe() чи Buffer.concat().

Він відрізняється від звичайного масиву тим, що:

  • зберігає лише байти (0-255),
  • має фіксований розмір,
  • працює швидше й ближче до "заліза",
  • використовується в усіх I/O операціях Node.js.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.