Node.js Buffer — Буферы

Node.js Buffer — Буферы

От автора: чистый JavaScript является Unicode-оптимизированным, но это не относится к двоичным данным. При работе с потоками TCP или файловой системой необходимо обрабатывать потоки октетов. Node предоставляет класс Buffer, который содержит экземпляры объектов для хранения необработанных данных, подобных массиву целых чисел, но соответствующих строкам памяти, которые сохраняются вне V8.

В Node js Buffer — это глобальный класс, доступ к которому осуществляется в приложении без импорта модуля буферизации.

Создание буферов

Node Buffer может быть создан различными способами. Способ 1. Ниже приведен синтаксис создания неинициализированного буфера в 10 октетов:

var buf = new Buffer(10);

Способ 2. Ниже приведен синтаксис создания буфера из заданного массива:

var buf = new Buffer([10, 20, 30, 40, 50]);

Способ 3. Ниже приведен синтаксис создания буфера из заданной строки и опционального параметра — типа кодировки:

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого профессионального роста с нуля в сайтостроении

Узнать подробнее
var buf = new Buffer("Simply Easy Learning", "utf-8");

Хотя «utf8» является кодировкой по умолчанию, вы можете использовать любые из следующих кодировок: «ascii», «utf8», «utf16le», «ucs2», «base64» или «hex».

Запись в буфер

Синтаксис. Ниже приведен синтаксис метода для записи в буфер Node:

buf.write(string[, offset][, length][, encoding])

Параметры. Ниже приводится описание используемых параметров -

string — это строковые данные, которые должны быть записаны в буфер.

offset — это индекс буфера, с которого начинается запись. Значение по умолчанию — 0.

length — это количество байтов для записи. По умолчанию — buffer.length.

encoding – используемая кодировка. ‘utf8′ — это кодировка по умолчанию.

Возвращаемое значение

Этот метод возвращает количество записанных октетов. Если в буфере недостаточно места для размещения всей строки, будет записана часть строки.

Пример

buf = new Buffer(256);
len = buf.write("Simply Easy Learning");
 
console.log("Octets written : "+  len);

После выполнения приведенной выше программы, мы получим следующий результат:

Octets written : 20

Чтение из буфера

Синтаксис. Ниже приведен синтаксис метода для чтения данных из буфера Node:

buf.toString([encoding][, start][, end])

Параметры

Ниже приводится описание используемых параметров:

encoding – используемая кодировка. ‘utf8′ — это кодировка по умолчанию.

start — индекс, с которого начинается считывание данных, по умолчанию — 0.

end –индекс на котором заканчивается считывание из буфера, по умолчанию – окончание буфера.

Возвращаемое значение

Этот метод декодирует и возвращает строку из данных буфера, закодированных с использованием указанной кодировки.

Пример

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
  buf = 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

После выполнения приведенной выше программы, мы получим следующий результат:

abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

Преобразование буфера в JSON

Синтаксис. Ниже приведен синтаксис метода преобразования буфера Node в объект JSON:

buf.toJSON()

Возвращаемое значение

Этот метод возвращает JSON-представление экземпляра Buffer.

Пример

var buf = new Buffer('Simply Easy Learning');
var json = buf.toJSON(buf);
 
console.log(json);

После выполнения приведенной выше программы, мы получим следующий результат:

 [ 83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110,
 103 ]

Конкатенация буферов

Синтаксис. Ниже приведен синтаксис метода для конкатенации буферов Node в один буфер Node:

Buffer.concat(list[, totalLength])

Параметры

Ниже приводится описание используемых параметров -

list — список массивов объектов Buffer, которые будут объединены.

totalLength — это общая длина буферов для конкатенирования.

Возвращаемое значение

Этот метод возвращает экземпляр Buffer.

Пример

var buffer1 = new Buffer('TutorialsPoint ');
var buffer2 = new Buffer('Simply Easy Learning');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 content: " + buffer3.toString());

После выполнения приведенной выше программы, мы получим следующий результат:

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого профессионального роста с нуля в сайтостроении

Узнать подробнее
buffer3 content: TutorialsPoint Simply Easy Learning

Сравнение буферов

Синтаксис. Ниже приведен синтаксис метода сравнения двух буферов Node:

buf.compare(otherBuffer);

Параметры

Ниже приводится описание используемых параметров -

otherBuffer — это второй буфер, который будет сравниваться с buf

Возвращаемое значение

Возвращает число, указывающее насколько второй буфер превосходит либо меньше, либо соответствует buf.

Пример

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);
}

После выполнения приведенной выше программы, мы получим следующий результат:

ABC comes before ABCD

Копирование буфера

Синтаксис. Ниже приведен синтаксис метода копирования буфера Node:

buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])

Параметры

Ниже приводится описание используемых параметров:

targetBuffer — объект буфера который будет скопирован в буфер.

targetStart — число, необязательный, по умолчанию: 0

sourceStart — число, необязательный, по умолчанию: 0

sourceEnd — число, необязательный, по умолчанию: buffer.length

Возвращаемое значение

Не возвращает значение. Копирует данные из области данного буфера в область целевого буфера, даже если область целевой памяти меньше исходной. Если это не задано явно, для параметров targetStart и sourceStart по умолчанию задается значение 0, а для sourceEnd — buffer.length.

Пример

var buffer1 = new Buffer('ABC');
 
//копирование буфера
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

После выполнения приведенной выше программы, мы получим следующий результат:

buffer2 content: ABC

Выделение буфера

Синтаксис. Ниже приведен синтаксис метода для получения подбуфера буфера Node:

buf.slice([start][, end])

Параметры

Ниже приводится описание используемых параметров:

start — число, необязательный, по умолчанию: 0

end — число, необязательный, по умолчанию: buffer.length

Возвращаемое значение

Возвращает новый буфер, который ссылается на ту же область памяти, что и старый буфер, но ограниченную индексами start (по умолчанию 0) и end (по умолчанию buffer.length). Отрицательные индексы отсчитываются с конца буфера.

Пример

var buffer1 = new Buffer('TutorialsPoint');
 
//выделение буфера
var buffer2 = buffer1.slice(0,9);
console.log("buffer2 content: " + buffer2.toString());

После выполнения приведенной выше программы, мы получим следующий результат:

buffer2 content: Tutorials

Длина буфера

Синтаксис. Ниже приведен синтаксис метода для получения размера буфера Node в байтах:

buf.length;

Возвращаемое значение

Возвращает размер буфера в байтах.

Пример

var buffer = new Buffer('TutorialsPoint');
 
//длина буфера
console.log("buffer length: " + buffer.length);

После выполнения приведенной выше программы, мы получим следующий результат:

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). Используется для сортировки массивов буферов.

Источник: https://www.tutorialspoint.com/

Редакция: Команда webformyself.

Современные тенденции и подходы в веб-разработке

Узнайте алгоритм быстрого профессионального роста с нуля в сайтостроении

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Курс по NodeJS. Основы

Прямо сейчас посмотрите курс по NodeJS!

Смотреть курс

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree