Node.js - Буферы

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

Класс буфера - это глобальный класс, к которому можно получить доступ в приложении без импорта модуля буфера.

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

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».

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

Синтаксис

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

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

Чтение из буферов

Синтаксис

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

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

Параметры

Вот описание используемых параметров -

  • encoding- Используемая кодировка. "utf8" - кодировка по умолчанию.

  • start - Начальный индекс для начала чтения, по умолчанию 0.

  • end - От конца индекса до конца чтения, по умолчанию - полный буфер.

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

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

пример

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

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

abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

Преобразовать буфер в JSON

Синтаксис

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

buf.toJSON()

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

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

пример

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

console.log(json);

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

{ type: 'Buffer',
   data: 
   [ 
      83,
      105,
      109,
      112,
      108,
      121,
      32,
      69,
      97,
      115,
      121,
      32,
      76,
      101,
      97,
      114,
      110,
      105,
      110,
      103 
   ]
}

Конкатенатные буферы

Синтаксис

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

Buffer.concat(list[, totalLength])

Параметры

Вот описание используемых параметров -

  • list - Массив Список объектов буфера для объединения.

  • 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

Сравнить буферы

Синтаксис

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

buf.compare(otherBuffer);

Параметры

Вот описание используемых параметров -

  • otherBuffer - Это другой буфер, который будет сравниваться с 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

Копировать буфер

Синтаксис

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

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

//copy a buffer
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

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

buffer2 content: ABC

Срез буфер

Синтаксис

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

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

Параметры

Вот описание используемых параметров -

  • start - Число, необязательно, по умолчанию: 0

  • end - Число, необязательно, по умолчанию: buffer.length

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

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

пример

var buffer1 = new Buffer('TutorialsPoint');

//slicing a buffer
var buffer2 = buffer1.slice(0,9);
console.log("buffer2 content: " + buffer2.toString());

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

buffer2 content: Tutorials

Длина буфера

Синтаксис

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

buf.length;

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

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

пример

var buffer = new Buffer('TutorialsPoint');

//length of the buffer
console.log("buffer length: " + buffer.length);

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

buffer length: 14

Справочник по методам

Sr.No. Метод и описание
1

new Buffer(size)

Выделяет новый буфер размером октетов. Обратите внимание, что размер не должен превышать kMaxLength. В противном случае здесь будет выброшено RangeError.

2

new Buffer(buffer)

Копирует переданные данные буфера в новый экземпляр Buffer.

3

new Buffer(str[, encoding])

Выделяет новый буфер, содержащий заданную строку. кодировка по умолчанию "utf8".

4

buf.length

Возвращает размер буфера в байтах. Обратите внимание, что это не обязательно размер содержимого. длина относится к объему памяти, выделенной для буферного объекта. Он не меняется при изменении содержимого буфера.

5

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

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

6

buf.writeUIntLE(value, offset, byteLength[, noAssert])

Записывает значение в буфер по указанному смещению и byteLength. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. По умолчанию - false.

7

buf.writeUIntBE(value, offset, byteLength[, noAssert])

Записывает значение в буфер по указанному смещению и byteLength. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. По умолчанию - false.

8

buf.writeIntLE(value, offset, byteLength[, noAssert])

Записывает значение в буфер по указанному смещению и byteLength. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. По умолчанию - false.

9

buf.writeIntBE(value, offset, byteLength[, noAssert])

Записывает значение в буфер по указанному смещению и byteLength. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. По умолчанию - false.

10

buf.readUIntLE(offset, byteLength[, noAssert])

Обобщенная версия всех числовых методов чтения. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

11

buf.readUIntBE(offset, byteLength[, noAssert])

Обобщенная версия всех числовых методов чтения. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

12

buf.readIntLE(offset, byteLength[, noAssert])

Обобщенная версия всех числовых методов чтения. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

13

buf.readIntBE(offset, byteLength[, noAssert])

Обобщенная версия всех числовых методов чтения. Поддерживает точность до 48 бит. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

14

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

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

15

buf.toJSON()

Возвращает JSON-представление экземпляра Buffer. JSON.stringify неявно вызывает эту функцию при преобразовании экземпляра Buffer в строку.

16

buf[index]

Получить и установить октет в index. Значения относятся к отдельным байтам, поэтому допустимый диапазон составляет от 0x00 до 0xFF в шестнадцатеричном формате или от 0 до 255.

17

buf.equals(otherBuffer)

Возвращает логическое значение, если этот буфер и otherBuffer имеют одинаковые байты.

18

buf.compare(otherBuffer)

Возвращает число, показывающее, идет ли этот буфер до или после, или совпадает с другим буфером в порядке сортировки.

19

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

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

20

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

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

21 год

buf.readUInt8(offset[, noAssert])

Считывает из буфера 8-битное целое число без знака по указанному смещению. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

22

buf.readUInt16LE(offset[, noAssert])

Считывает из буфера 16-разрядное целое число без знака по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

23

buf.readUInt16BE(offset[, noAssert])

Считывает из буфера 16-разрядное целое число без знака по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

24

buf.readUInt32LE(offset[, noAssert])

Считывает из буфера 32-разрядное целое число без знака по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

25

buf.readUInt32BE(offset[, noAssert])

Считывает из буфера 32-разрядное целое число без знака по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

26

buf.readInt8(offset[, noAssert])

Считывает из буфера 8-разрядное целое число со знаком по указанному смещению. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

27

buf.readInt16LE(offset[, noAssert])

Считывает из буфера 16-разрядное целое число со знаком по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

28

buf.readInt16BE(offset[, noAssert])

Считывает из буфера 16-разрядное целое число со знаком по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

29

buf.readInt32LE(offset[, noAssert])

Считывает из буфера 32-разрядное целое число со знаком по указанному смещению с указанным порядком байтов. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

30

buf.readInt32BE(offset[, noAssert])

Считывает из буфера 32-разрядное целое число со знаком по указанному смещению с указанным порядком байтов. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

31 год

buf.readFloatLE(offset[, noAssert])

Читает 32-битное число с плавающей запятой из буфера по указанному смещению с указанным порядком байтов. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

32

buf.readFloatBE(offset[, noAssert])

Читает 32-битное число с плавающей запятой из буфера по указанному смещению с указанным порядком байтов. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

33

buf.readDoubleLE(offset[, noAssert])

Считывает из буфера 64-битное число double по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

34

buf.readDoubleBE(offset[, noAssert])

Считывает из буфера 64-битное число double по указанному смещению с указанным конечным форматом. Установите для noAssert значение true, чтобы пропустить проверку смещения. Это означает, что смещение может выходить за пределы буфера. По умолчанию - false.

35 год

buf.writeUInt8(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению. Обратите внимание, что значение должно быть допустимым 8-разрядным целым числом без знака. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

36

buf.writeUInt16LE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть допустимым 16-разрядным целым числом без знака. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в правильности. По умолчанию - false.

37

buf.writeUInt16BE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть допустимым 16-разрядным целым числом без знака. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

38

buf.writeUInt32LE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 32-разрядным целым числом без знака. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

39

buf.writeUInt32BE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 32-разрядным целым числом без знака. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

40

buf.writeInt8(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 8-разрядным целым числом со знаком. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

41 год

buf.writeInt16LE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 16-разрядным целым числом со знаком. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

42

buf.writeInt16BE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 16-разрядным целым числом со знаком. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

43 год

buf.writeInt32LE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 32-разрядным целым числом со знаком. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

44

buf.writeInt32BE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 32-разрядным целым числом со знаком. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в правильности. По умолчанию - false.

45

buf.writeFloatLE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 32-битным числом с плавающей запятой. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

46

buf.writeFloatBE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть действительным 32-битным числом с плавающей запятой. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

47

buf.writeDoubleLE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть допустимым 64-битным типом double. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

48

buf.writeDoubleBE(value, offset[, noAssert])

Записывает значение в буфер по указанному смещению с указанным конечным форматом. Обратите внимание, что значение должно быть допустимым 64-битным типом double. Установите для noAssert значение true, чтобы пропустить проверку значения и смещения. Это означает, что значение может быть слишком большим для конкретной функции, а смещение может выходить за пределы конца буфера, что приводит к молчаливому удалению значений. Его не следует использовать, если вы не уверены в его правильности. По умолчанию - false.

49

buf.fill(value[, offset][, end])

Заполняет буфер указанным значением. Если смещение (по умолчанию 0) и конец (по умолчанию buffer.length) не указаны, он заполнит весь буфер.

Методы класса

Sr.No. Метод и описание
1

Buffer.isEncoding(encoding)

Возвращает true, если кодировка является допустимым аргументом кодировки, иначе false.

2

Buffer.isBuffer(obj)

Проверяет, является ли obj буфером.

3

Buffer.byteLength(string[, encoding])

Дает фактическую длину строки в байтах. кодировка по умолчанию "utf8". Это не то же самое, что String.prototype.length, поскольку String.prototype.length возвращает количество символов в строке.

4

Buffer.concat(list[, totalLength])

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

5

Buffer.compare(buf1, buf2)

То же, что и buf1.compare (buf2). Полезно для сортировки массива буферов.