← Назад к вопросам

Что такое 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
  • Позволяет работать с большими файлами без загрузки их полностью в память