От автора: чистый JavaScript является Unicode-оптимизированным, но это не относится к двоичным данным. При работе с потоками TCP или файловой системой необходимо обрабатывать потоки октетов. Node предоставляет класс Buffer, который содержит экземпляры объектов для хранения необработанных данных, подобных массиву целых чисел, но соответствующих строкам памяти, которые сохраняются вне V8.
В Node js Buffer — это глобальный класс, доступ к которому осуществляется в приложении без импорта модуля буферизации.
Создание буферов
Node Buffer может быть создан различными способами. Способ 1. Ниже приведен синтаксис создания неинициализированного буфера в 10 октетов:
1 |
var buf = new Buffer(10); |

Хотите узнать, что необходимо для создания сайта?
Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!
Смотреть видеоСпособ 2. Ниже приведен синтаксис создания буфера из заданного массива:
1 |
var buf = new Buffer([10, 20, 30, 40, 50]); |
Способ 3. Ниже приведен синтаксис создания буфера из заданной строки и опционального параметра — типа кодировки:
1 |
var buf = new Buffer("Simply Easy Learning", "utf-8"); |
Хотя «utf8» является кодировкой по умолчанию, вы можете использовать любые из следующих кодировок: «ascii», «utf8», «utf16le», «ucs2», «base64» или «hex».
Запись в буфер
Синтаксис. Ниже приведен синтаксис метода для записи в буфер Node:
1 |
buf.write(string[, offset][, length][, encoding]) |
Параметры. Ниже приводится описание используемых параметров —
string — это строковые данные, которые должны быть записаны в буфер.
offset — это индекс буфера, с которого начинается запись. Значение по умолчанию — 0.
length — это количество байтов для записи. По умолчанию — buffer.length.
encoding – используемая кодировка. ‘utf8’ — это кодировка по умолчанию.
Возвращаемое значение
Этот метод возвращает количество записанных октетов. Если в буфере недостаточно места для размещения всей строки, будет записана часть строки.
Пример
1 2 3 4 |
buf = new Buffer(256); len = buf.write("Simply Easy Learning"); console.log("Octets written : "+ len); |
После выполнения приведенной выше программы, мы получим следующий результат:
1 |
Octets written : 20 |
Чтение из буфера
Синтаксис. Ниже приведен синтаксис метода для чтения данных из буфера Node:
1 |
buf.toString([encoding][, start][, end]) |
Параметры
Ниже приводится описание используемых параметров:
encoding – используемая кодировка. ‘utf8’ — это кодировка по умолчанию.
start — индекс, с которого начинается считывание данных, по умолчанию — 0.
end –индекс на котором заканчивается считывание из буфера, по умолчанию – окончание буфера.
Возвращаемое значение
Этот метод декодирует и возвращает строку из данных буфера, закодированных с использованием указанной кодировки.
Пример
1 2 3 4 5 6 7 8 9 |
buf = new Buffer(26); for (var i = 0 ; i < 26 ; i++) { buf[i] = i + 97; } console.log( buf.toString('ascii')); // outputs: abcdefghijklmnopqrstuvwxyz console.log( buf.toString('ascii',0,5)); // outputs: abcde console.log( buf.toString('utf8',0,5)); // outputs: abcde console.log( buf.toString(undefined,0,5)); // encoding defaults to 'utf8', outputs abcde |
После выполнения приведенной выше программы, мы получим следующий результат:
1 2 3 4 |
abcdefghijklmnopqrstuvwxyz abcde abcde abcde |
Преобразование буфера в JSON
Синтаксис. Ниже приведен синтаксис метода преобразования буфера Node в объект JSON:
1 |
buf.toJSON() |
Возвращаемое значение
Этот метод возвращает JSON-представление экземпляра Buffer.
Пример
1 2 3 4 |
var buf = new Buffer('Simply Easy Learning'); var json = buf.toJSON(buf); console.log(json); |
После выполнения приведенной выше программы, мы получим следующий результат:
1 2 |
[ 83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110, 103 ] |
Конкатенация буферов
Синтаксис. Ниже приведен синтаксис метода для конкатенации буферов Node в один буфер Node:
1 |
Buffer.concat(list[, totalLength]) |
Параметры
Ниже приводится описание используемых параметров —
list — список массивов объектов Buffer, которые будут объединены.
totalLength — это общая длина буферов для конкатенирования.
Возвращаемое значение
Этот метод возвращает экземпляр Buffer.
Пример
1 2 3 4 |
var buffer1 = new Buffer('TutorialsPoint '); var buffer2 = new Buffer('Simply Easy Learning'); var buffer3 = Buffer.concat([buffer1,buffer2]); console.log("buffer3 content: " + buffer3.toString()); |

Хотите узнать, что необходимо для создания сайта?
Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!
Смотреть видеоПосле выполнения приведенной выше программы, мы получим следующий результат:
1 |
buffer3 content: TutorialsPoint Simply Easy Learning |
Сравнение буферов
Синтаксис. Ниже приведен синтаксис метода сравнения двух буферов Node:
1 |
buf.compare(otherBuffer); |
Параметры
Ниже приводится описание используемых параметров —
otherBuffer — это второй буфер, который будет сравниваться с buf
Возвращаемое значение
Возвращает число, указывающее насколько второй буфер превосходит либо меньше, либо соответствует buf.
Пример
1 2 3 4 5 6 7 8 9 10 11 |
var buffer1 = new Buffer('ABC'); var buffer2 = new Buffer('ABCD'); var result = buffer1.compare(buffer2); if(result < 0) { console.log(buffer1 +" comes before " + buffer2); }else if(result == 0){ console.log(buffer1 +" is same as " + buffer2); }else { console.log(buffer1 +" comes after " + buffer2); } |
После выполнения приведенной выше программы, мы получим следующий результат:
1 |
ABC comes before ABCD |
Копирование буфера
Синтаксис. Ниже приведен синтаксис метода копирования буфера Node:
1 |
buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd]) |
Параметры
Ниже приводится описание используемых параметров:
targetBuffer — объект буфера который будет скопирован в буфер.
targetStart — число, необязательный, по умолчанию: 0
sourceStart — число, необязательный, по умолчанию: 0
sourceEnd — число, необязательный, по умолчанию: buffer.length
Возвращаемое значение
Не возвращает значение. Копирует данные из области данного буфера в область целевого буфера, даже если область целевой памяти меньше исходной. Если это не задано явно, для параметров targetStart и sourceStart по умолчанию задается значение 0, а для sourceEnd — buffer.length.
Пример
1 2 3 4 5 6 |
var buffer1 = new Buffer('ABC'); //copy a buffer var buffer2 = new Buffer(3); buffer1.copy(buffer2); console.log("buffer2 content: " + buffer2.toString()); |
После выполнения приведенной выше программы, мы получим следующий результат:
1 |
buffer2 content: ABC |
Выделение буфера
Синтаксис. Ниже приведен синтаксис метода для получения подбуфера буфера Node:
1 |
buf.slice([start][, end]) |
Параметры
Ниже приводится описание используемых параметров:
start — число, необязательный, по умолчанию: 0
end — число, необязательный, по умолчанию: buffer.length
Возвращаемое значение
Возвращает новый буфер, который ссылается на ту же область памяти, что и старый буфер, но ограниченную индексами start (по умолчанию 0) и end (по умолчанию buffer.length). Отрицательные индексы отсчитываются с конца буфера.
Пример
1 2 3 4 5 |
var buffer1 = new Buffer('TutorialsPoint'); //slicing a buffer var buffer2 = buffer1.slice(0,9); console.log("buffer2 content: " + buffer2.toString()); |
После выполнения приведенной выше программы, мы получим следующий результат:
1 |
buffer2 content: Tutorials |
Длина буфера
Синтаксис. Ниже приведен синтаксис метода для получения размера буфера Node в байтах:
1 |
buf.length; |
Возвращаемое значение
Возвращает размер буфера в байтах.
Пример
1 2 3 4 |
var buffer = new Buffer('TutorialsPoint'); //length of the buffer console.log("buffer length: " + buffer.length); |
После выполнения приведенной выше программы, мы получим следующий результат:
1 |
buffer length: 14 |
Описание методов
Ниже приведено описание методов, доступных в Node.js. Более подробную информацию вы можете найти в официальной документации.
Методы классов
Buffer.isEncoding(encoding) — Возвращает true, если кодировка является допустимым аргументом кодировки, иначе false.
Buffer.isBuffer(obj) — Проверяет является ли obj буфером.
Buffer.byteLength(string[, encoding]) — Возвращает фактическую длину строки в байтах. Кодировка по умолчанию — ‘utf8’. Это не то же самое, что и String.prototype.length, поскольку String.prototype.length возвращает количество символов в строке.
Buffer.concat(list[, totalLength]) — Возвращает буфер, который является результатом объединения всех буферов в списке.
Buffer.compare(buf1, buf2) — То же, что и buf1.compare (buf2). Используется для сортировки массивов буферов.
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.

Хотите узнать, что необходимо для создания сайта?
Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!
Смотреть видео
Хотите узнать, что необходимо для создания сайта?
Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!
Смотреть