Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке Buffer у Node.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`Buffer` - спеціальний тип даних Node.js для роботи з бінарними (сирими) даними, тобто послідовностями байтів, а не звичайних рядків чи об'єктів JavaScript; використовується в усіх I/O-операціях (файли, HTTP, TCP, потоки). **Ключове:** `Buffer.alloc()` обнуляє пам'ять перед використанням (безпечно, трохи повільніше), а `Buffer.allocUnsafe()` - ні (швидше, але може містити "сміття" з попередніх даних).Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення`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 | Властивість | Buffer | Array | String | |---|---|---|---| | Зберігає | байти | довільні значення | символи | | Змінюваність | можна змінювати | можна змінювати | незмінна | | Розмір | фіксований | динамічний | динамічний | | Призначення | бінарні дані | логіка й обчислення | текст | ## Підсумок > `Buffer` **у Node.js** - це об'єкт для роботи із **сирими бінарними даними**. > Він використовується в усіх операціях введення-виведення (I/O) - файли, мережа, потоки - > і дозволяє **читати, записувати й перетворювати байти** напряму, > забезпечуючи **високу продуктивність** і **низькорівневий контроль** над даними.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.