кодесурса
«node.js

Использование буферов в Node.js

script1adsense2code
script1adsense3code

Вступление

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

В Node есть несколько стратегий для манипулирования, создания и потребления октетов (один октет может использоваться для представления десятичных значений в диапазоне от 0 до 255.). Необработанные данные хранятся в экземплярах класса Buffer (который предназначен для обработки необработанных двоичных данных) в узле.

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

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

Список кодировки, используемый с узлом

Преобразование между строковыми объектами Buffers и JavaScript требует явного метода кодирования. В следующей таблице показаны различные кодировки строк.

кодирование Описание
'ASCII' только для 7-битных данных ASCII. Этот метод кодирования очень быстрый, но ограничен набором символов ascii. Чтобы преобразовать нулевой символ в 0x00, вы должны использовать 'utf8'.
'Utf8' Многобайтовые закодированные символы Юникода. Это стало доминирующей кодировкой символов для всемирной паутины.
'UTF16LE' Поддерживаются 2 или 4 байта, закодированные в младшем порядке символы Unicode, суррогатные пары (от U + 10000 до U + 10FFFF).
'Ucs2' Псевдоним utf16le.
'Base64' Base64 строковое кодирование.
«Двоичный» Метод кодирования необработанных двоичных данных в строки с использованием только первых 8 бит каждого символа. Этот метод кодирования устарел.
«Шестигранной» Этот метод используется для кодирования каждого байта в виде двух шестнадцатеричных символов.

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

Есть несколько способов создания новых буферов.

новый буфер (n)

new Buffer (n) используется для создания нового буфера из «n» октетов, где «n» - это число

Аргументы:

название Описание Тип
N Размер буфера. число

В следующем примере «буфер» содержит 10 октетов.


новый буфер (обр):

new Buffer (arr) используется для создания нового буфера, используя массив октетов.

Аргументы:

название Описание Тип
прибытие Данный массив. массив

В следующем примере roll_no содержит содержимое массива. Смотрите вывод.

«nodejs

новый буфер (str, [кодировка]):

new Buffer (str, [encoding]) используется для создания нового буфера, содержащего заданную строку.

Аргументы:

название Описание Требуется / Необязательно Тип
ул Данная строка необходимые строка
кодирование

Кодировка для использования. utf8 - кодировка по умолчанию. Смотрите список кодировки .

Необязательный строка

Смотрите следующий пример:

«nodejs

В приведенном выше выводе журнала объект буфера содержит 18 байтов данных, представленных в шестнадцатеричном формате.

Проверить допустимый тип кодировки - Buffer.isEncoding (кодировка):

Метод isEncoding () используется для проверки, является ли строка кодирования допустимым типом кодирования или нет.

Аргументы:

название Описание Тип
кодирование Тип кодирования. строка

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

Смотрите следующие примеры:

«nodejs

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

buf.write (строка, [смещение], [длина], [кодировка]):

Метод buf.write (str, [offset], [length], [encoding]) используется для записи строки в буфер.

Аргументы:

название Описание Требуется / Необязательно Тип
ул Данная строка. необходимые строка
смещение Смещение или индекс буфера, с которого начинается запись. Значение по умолчанию 0. Необязательный число
длина Количество байтов для записи. По умолчанию для buffer.length - смещение. Необязательный число
кодирование Кодировка для использования. utf8 - кодировка по умолчанию. Смотрите список кодировки . Необязательный строка

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

Примеры :

Давайте создадим буфер размером 15 октетов.

«nodejs

Теперь напишите строку:

«nodejs

В приведенном выше примере первым аргументом buffer.write является строка («Node.js»), которую нужно записать в буфер, а вторым аргументом является строковое кодирование («utf8»). В этом случае второй аргумент не является обязательным, поскольку «utf8» является кодировкой по умолчанию.
str1.write вернул 7, то есть мы записали семь байтов буфера. Длина строки "Node.js" также равна семи.

Вот еще один пример, где мы добавили все три аргумента, второй аргумент указывает смещение.

«nodejs

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

buf.toString ([кодировка], [начало], [конец])

Метод buf.toString ([encoding], [start], [end]) декодирует и возвращает строку из данных буфера. Здесь в 'buf' данные уже записаны с помощью метода записи в буферы .

Аргументы:

название Описание Требуется / Необязательно Тип
кодирование Кодировка для использования. utf8 - кодировка по умолчанию. Смотрите список кодировки . Необязательный строка
Начните Начиная с начала, по умолчанию 0. Необязательный число
конец Окончание в конце. По умолчанию используется значение buffer.length. Необязательный число

Возвращаемое значение: строка.

В следующем примере мы создали буфер размером 15 октетов, а затем записали строку «Node.js». Первый метод toString () читает весь буфер и показывает некоторые нулевые символы ('/ u0000'), так как буфер содержит не все текстовые символы. Второй читает символы буфера с 0 по 7- ю позицию и возвращает «Node.js».

«nodejs

JSON-представление: buf.toJSON ()

Метод buf.toJSON () используется для получения JSON-представления экземпляра Buffer, который идентичен выводу для массивов JSON. Вот пример:

«nodejs

Размер буфера str1 был 10, а длина указанной строки - 7, поэтому последние три значения в массиве показывают 0.

Установка индивидуального октета: buf [index]

Buf [index] используется для получения и установки октета в index. Значения относятся к отдельным байтам, допустимый диапазон составляет от 0x00 до 0xFF hex или от 0 до 255. В следующем примере мы вставили три символа '*' в конец строки 'Node.js' в буфере.

«nodejs

Примечание. Подробности о методе charCodeAt () см . Здесь .

Проверяет, является ли объект буфером - Buffer.isBuffer (obj):

Метод Buffer.isBuffer (obj) используется для проверки, является ли объект в Node.js буфером или нет.

Возвращаемое значение: Вернуть true, если объект является буфером или false в противном случае.
Тип значения: логическое.

Смотрите следующие примеры:

«nodejs

Фактическая длина байта строки: Buffer.byteLength (str, [encoding])

Метод Buffer.byteLength (string, [encoding]) используется для получения фактической длины байта строки с заданной кодировкой.

Аргументы:

название Описание Требуется / Необязательно Тип
ул Данная строка необходимые строка
кодирование Кодировка для использования. utf8 - кодировка по умолчанию. Смотрите список кодировки . Необязательный строка

Возвращаемое значение: фактическая длина строки в байтах.
Тип значения: число.

В следующих примерах фактическая длина строки «A» составляет 1 байт, тогда как длина «/ u00bd» составляет 2 байта.

«nodejs

Concat два для большего количества буферов: Buffer.concat (list, [totalLength]

Метод Buffer.concat (list, [totalLength]) используется для объединения двух или более буферов / строк.

Аргументы:

название Описание Требуется / Необязательно Тип
список Список объектов буфера для конкатата необходимые массив
Общая длина Общая длина буферов при объединении. Необязательный число

Возвращаемое значение: буфер

  • Если в списке нет элементов, или если totalLength равно 0, то он возвращает буфер нулевой длины.
  • Если список содержит ровно один элемент, возвращается первый элемент списка.
  • Если в списке более одного элемента, создается новый буфер.
  • Если totalLength не указано, оно читается из буферов в списке. Тем не менее, это добавляет дополнительный цикл к функции, поэтому быстрее указать длину в явном виде.

Смотрите следующие примеры:

«nodejs

Длина buffer1 равна 4, а buffer2 равна 2. В последнем примере мы упомянули общую длину буферов (5), поэтому он показывает «Nodej», а не «Nodejs».

Длина буфера в байтах - buf.length

Метод buf.length используется для получения размера буфера и показывает, сколько памяти выделено. Он не совпадает с размером содержимого буфера, поскольку буфер может заполняться на одну треть. Например :

«nodejs

Буферная копия: buf.copy (targetBuffer, [targetStart], [sourceStart], [sourceEnd])

Метод buf.copy (targetBuffer, [targetStart], [sourceStart], [sourceEnd]) используется для копирования содержимого одного буфера в другой.

Аргументы:

название Описание Требуется / Необязательно Тип
targetBuffer Буфер для копирования. необходимые Буферный объект
targetStart Начальная позиция целевого буфера. По умолчанию 0. Необязательный число
sourceStart Начальная позиция исходного буфера. По умолчанию 0. Необязательный число
sourceEnd Конечная позиция исходного буфера. По умолчанию для buffer.length. Необязательный число

В следующем примере буфер 'str1' (длина 6) скопирован в буфер "str2" (длина 8) со второго байта.

«nodejs

Нарезать буфер: buf.slice ([начало], [конец])

Метод buf.slice ([start], [end]) используется для извлечения подраздела буфера, который ссылается на ту же память, что и старая.

Аргументы:

название Описание Требуется / Необязательно Тип
Начните Начальная позиция в буфере. По умолчанию 0. Необязательный число
конец Конечная позиция в буфере. По умолчанию используется значение buffer.length. Необязательный число

Примечание. Отрицательные индексы начинаются с конца буфера.

Вот некоторые примеры :

«nodejs

Предыдущая: Консоль
Далее: Модуль ОС

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code