Skip to main content

Що таке Buffer у Node.js?

Buffer - це спеціальний тип даних у Node.js, призначений для роботи з бінарними (сирими) даними, тобто з послідовностями байтів, а не зі звичайними рядками чи об'єктами JavaScript.

1. Що таке Buffer простими словами

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

Проблема: JavaScript спочатку (у браузері) не вміє працювати з бінарними даними напряму - у нього є лише рядки й об'єкти.

Рішення: Node.js увів об'єкт Buffer - структуру, яка:

  • зберігає послідовність байтів (raw data);
  • дозволяє читати й записувати ці байти в різних форматах (UTF-8, Base64, HEX тощо);
  • використовується в усіх I/O-операціях (файли, HTTP, TCP, streams).

2. Приклад використання Buffer

javascript
const buf = Buffer.from('Hello', 'utf8'); console.log(buf); // <Buffer 48 65 6c 6c 6f> console.log(buf.toString()); // "Hello"

Тут:

  • 'Hello' - рядок,
  • Buffer.from() - створив буфер із рядка,
  • усередині зберігаються байти (0x48, 0x65, ...),
  • toString() перетворює байти назад у текст.

3. Де використовується Buffer

Node.js застосовує Buffer скрізь, де потрібно обробити двійкові дані:

ПрикладОпис
fs.readFile()читає файл у Buffer
httpтіло запиту чи відповіді надходить як потік байтів
net.Socketпередача бінарних даних по TCP
zlib, cryptoстиснення, шифрування
streamусі потоки читають/пишуть саме Buffer-об'єкти

4. Основні способи створення Buffer

javascript
// 1. Створити буфер з рядка const buf1 = Buffer.from('Node.js'); // 2. Створити буфер заданого розміру (порожній) const buf2 = Buffer.alloc(10); // 10 байт, заповнено нулями // 3. Створити небезпечний буфер (без обнулення) const buf3 = Buffer.allocUnsafe(10); // швидше, але містить "сміття" // 4. Створити з масиву чисел const buf4 = Buffer.from([0x41, 0x42, 0x43]); console.log(buf4.toString()); // "ABC"

5. Читання й запис даних у Buffer

javascript
const buf = Buffer.alloc(4); buf.writeUInt8(65, 0); // Записуємо число 65 (A) у байт №0 buf.writeUInt8(66, 1); // B buf.writeUInt8(67, 2); // C console.log(buf.toString('utf8')); // "ABC"

Можна читати як числа, рядки, float, hex тощо.

6. Взаємодія з потоками

Під час читання файлу потік повертає дані у вигляді буферів:

javascript
const fs = require('fs'); const stream = fs.createReadStream('file.txt'); stream.on('data', chunk => { console.log('Тип даних:', Buffer.isBuffer(chunk)); // true console.log('Частина файлу:', chunk.toString()); });

Кожен chunk - це Buffer, що представляє шматок файлу.

7. Робота з кодуваннями

Buffer підтримує різні кодування:

  • 'utf8'
  • 'ascii'
  • 'base64'
  • 'hex'
  • 'latin1'
  • 'utf16le'
javascript
const buf = Buffer.from('Привіт', 'utf8'); console.log(buf.toString('hex')); // hex-представлення тексту

8. Чому Buffer важливий

ПеревагаПояснення
ЕфективністьРобота напряму з байтами без проміжних перетворень.
Низькорівнева інтеграціяПотрібен для взаємодії з ОС, мережею, файловою системою.
СумісністьУніверсальний формат обміну між потоками, HTTP, TCP тощо.

9. Відмінність Buffer від Array чи String

ВластивістьBufferArrayString
Зберігаєбайтидовільні значеннясимволи
Змінюваністьможна змінюватиможна змінюватинезмінна
Розмірфіксованийдинамічнийдинамічний
Призначеннябінарні данілогіка й обчисленнятекст

Підсумок

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

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

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

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