← Назад к вопросам
Что такое Buffer в Node.js и для чего он используется?
1.3 Junior🔥 71 комментариев
#Node.js и JavaScript
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Buffer в Node.js и для чего он используется?
Buffer — это встроенный класс в Node.js для работы с бинарными данными (сырыми байтами). Он представляет собой фиксированный размер памяти, отделённый от JavaScript heap, и используется для операций с файлами, сетевыми потоками и другими бинарными операциями.
Основные характеристики
- Фиксированный размер — размер буфера определяется при создании
- Бинарные данные — хранит байты, а не текст или объекты
- Глобальный объект — доступен без импорта в Node.js
- Аналог типизированных массивов — похож на
Uint8Arrayв браузере
Создание Buffer
// Из строки
const buf1 = Buffer.from('Hello', 'utf8');
console.log(buf1); // <Buffer 48 65 6c 6c 6f>
// Из массива
const buf2 = Buffer.from([1, 2, 3, 4]);
console.log(buf2); // <Buffer 01 02 03 04>
// Выделение памяти (заполняется нулями)
const buf3 = Buffer.alloc(10);
console.log(buf3); // <Buffer 00 00 00 00 00 00 00 00 00 00>
// Выделение без инициализации (небезопасно, быстрее)
const buf4 = Buffer.allocUnsafe(10);
Практические применения
1. Работа с файлами
const fs = require('fs');
// Чтение файла в буфер
const buffer = fs.readFileSync('file.txt');
console.log(buffer.toString('utf8'));
// Запись буфера в файл
fs.writeFileSync('output.txt', buffer);
2. Сетевые операции
const net = require('net');
const server = net.createServer((socket) => {
socket.on('data', (buffer) => {
console.log('Received:', buffer.toString());
socket.write(Buffer.from('Hello Client!'));
});
});
3. Работа с потоками
const fs = require('fs');
const stream = fs.createReadStream('large-file.txt');
stream.on('data', (chunk) => {
// chunk — это Buffer
console.log(`Received ${chunk.length} bytes`);
process.stdout.write(chunk);
});
4. Кодирование/декодирование
// UTF-8 → Base64
const original = Buffer.from('Hello World', 'utf8');
const encoded = original.toString('base64');
console.log(encoded); // SGVsbG8gV29ybGQ=
// Base64 → UTF-8
const decoded = Buffer.from(encoded, 'base64');
console.log(decoded.toString('utf8')); // Hello World
Методы Buffer
const buf = Buffer.from('Hello');
// Получить длину
console.log(buf.length); // 5
// Записать данные
buf.write('Hi', 0, 2);
console.log(buf.toString()); // Hilllo
// Скопировать часть
const part = buf.slice(0, 2);
console.log(part.toString()); // Hi
// Конкатенация буферов
const buf1 = Buffer.from('Hello ');
const buf2 = Buffer.from('World');
const combined = Buffer.concat([buf1, buf2]);
console.log(combined.toString()); // Hello World
// Сравнение
console.log(buf1.equals(buf2)); // false
Кодировки
Поддерживаемые кодировки:
- utf8 — UTF-8 (по умолчанию)
- ascii — ASCII
- base64 — Base64
- hex — Шестнадцатеричная
- latin1 — ISO-8859-1
Производительность
Buffer — критически важен для производительности Node.js:
- Используется во всех I/O операциях (файлы, сокеты, потоки)
- Избегает копирования данных в JavaScript heap
- Позволяет работать с большими файлами без загрузки их полностью в память