Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

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

Node.js включает класс Buffer. Он может работать с двоичными данными при управлении потоками TCP (протокол управления передачей) и операциями чтения-записи в файловой системе.

Узнайте, как создавать, читать и изменять содержимое буфера.

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

Чтобы создать буфер в Node.js, вы будете использовать выделить() или от() методы. выделить() метод создает новый буфер, указывая его размер при создании в качестве первого и единственного обязательного параметра. Это полезно, когда у вас нет данных для хранения во время создания буфера.

Укажите параметр размера буфера в байтах при создании буфера с выделить() метод. Например:

константа buf = Buffer.alloc(8);
консоль.log (буф);
// выход:
instagram viewer

Класс Buffer автоматически добавляет нули в качестве значений-заполнителей для новых данных, когда вы создаете его с помощью выделить() метод.

Класс Buffer выражает каждое значение 0 как 00, используя шестнадцатеричный формат. В этом примере он содержит всего восемь значений.

Чтобы инициализировать буфер с другими значениями заполнителей, передайте второй наполнять параметр:

константа buf_filled = Buffer.alloc(8, 5);
консоль.log(buf_filled);
// выход:

Этот объект цитирует часть памяти, в которой хранятся 8 байтов значения 05. Обратите внимание, что хотя вы передали число как наполнять параметр, буферы хранят данные только в двоичном виде.

После выделения памяти в буфер запишите данные, вызвав метод писать() метод:

константа buf = Buffer.alloc(8);

буф.записать("в", "утф-8");
консоль.log (баф)
// выход:

буф.записать("ва","утф-8");
консоль.log (баф)
// выход:

писать() метод использует кодировку символов для преобразования первого параметра, используя утф-8 а затем записывает строку в буфер. Добавление второго символа в строку заполнит второй байт.

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

Например:

// Нить
константа stringBuf = Buffer.from('нить')
консоль.log(stringBuf)
// выход:

// Множество
константа arrayBuf = Buffer.from([97, 114, 114, 97, 121], 'шестнадцатеричный')
консоль.log(arrayBuf);
// выход:

от() Метод принимает ввод в качестве своего первого параметра, вычисляет количество байтов, необходимых для кодирования данных, а затем отправляет результат в буфер. Указав другой формат кодировки в качестве второго параметра, вы можете переопределить кодировку по умолчанию (UTF-8).

Передача номеров в от() метод приведет к ошибке.

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

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

Класс Buffer позволяет нам читать отдельные байты своих данных, используя синтаксис квадратных скобок JavaScript.

Например:

константа myBuf = Буфер.из('Мой');
консоль.бревно(MyBuf[1]);
// вывод: 105

консоль.бревно(MyBuf[3]);
// вывод: 101

консоль.бревно(MyBuf[5]);
// вывод: не определено

Приведенный выше кодовый блок использует синтаксис квадратных скобок для получения значений первого и третьего байтов в их десятичном представлении. Попытка получить недопустимый байт приведет к неопределенный ошибка.

Чтобы получить доступ ко всем своим данным, класс Buffer поставляется с методами toJSON() и нанизывать(), которые получают содержимое в двух разных форматах.

нанизывать() метод выводит строку в качестве содержимого буфера:

константа myBuf = Буфер.из('Мой');
консоль.бревно(мой баф.нанизывать());
// вывод: 'Мой'

константа numberBuf = Buffer.from([123]);
консоль.бревно(числоBuf.нанизывать())
// выход: '{'

константа emptyBuf = Buffer.alloc(5);
консоль.бревно(пустойбуф.нанизывать());
// вывод: '\\x00\\x00\\x00\\x00\\x00'

Первый вызов инициализирует буфер со значением «Мой», который реплицируется вызовом toString. Во втором примере для инициализации используется массив с одним целым числом, который имеет строковое представление в виде «{" характер. В последнем случае буфер с пятью нулевые значения возвращает строку «\х00\х00\х00\х00\х00”. Строка \х00 является шестнадцатеричным представлением нуля.

нанизывать() Метод всегда выводит результат в строковом формате, независимо от того, с каким типом данных вы инициализируете буфер.

.toJSON() метод возвращает десятичное представление данных буфера, независимо от данных, которые вы использовали для инициализации буфера.

Например:

константа myBuf = Буфер.из('Мой');
консоль.бревно(мой баф.toJSON());
// выход: { тип: «Буфер», данные: [ 77, 105, 110, 101 ] }

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

Изменение буфера

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

При использовании синтаксиса квадратных скобок для изменения отдельного содержимого вы можете назначить только десятичное представление значения.

Например:

мой Буф[0] = 70
консоль.бревно(мой баф.нанизывать())
// вывод: 'Хорошо'

Поскольку буферы представляют собой двоичные данные, вы не можете присвоить определенной части буфера строку. Если вы попытаетесь установить отдельный байт в строку, Buffer преобразует его в нулевой символ.

Например:

мойБуф[0] = 'Ф';
консоль.бревно(мой баф.нанизывать());
// вывод: '\\x00ine'

Кроме того, вы можете изменить все содержимое буфера, используя писать() метод.

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

Например, попробуйте установить пятый элемент мой баф к р через его десятичное представление 114:

myBuf[4] = 114;
консоль.бревно(мой баф.нанизывать());
// вывод: 'Мой'

Обратите внимание, что нанизывать() метод возвращает одно и то же значение 'Мой'.

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

константа buf1 = Buffer.alloc(5)
buf1.записать('число');
консоль.бревно(buf1.нанизывать())
// вывод: 'число'

Используя нанизывать() метод для подтверждения данных буфера, он возвращает «число» скорее, чем 'число'. Какой аргумент вставляется внутри писать() метод.

Буферы записываются последовательно, начиная с нулевого индекса. писать() метод последовательно добавляет байты в буфер, перезаписывая любые предыдущие данные.

Например:

константа buf2 = Buffer.alloc(6);

buf2.записать('член');
консоль.бревно(buf2.нанизывать())
// вывод: 'член'

buf2.записать('привет');
консоль.бревно(buf2.нанизывать());
// вывод: 'химбер'

Приведенный выше код создает шестибайтовый буфер и добавляет строку «член" к нему с помощью писать() метод.

Затем он обновляет буфер новым содержимым, которое занимает меньше места в памяти, чем предыдущее содержимое.

Это приводит к созданию новой строки, в которой первые два байта перезаписываются, а остальные байты остаются без изменений.

Многие API и структуры данных используют буферы

Теперь вы знаете, как создавать буфер, записывать в него, читать его содержимое и изменять его с помощью соответствующих методов.

Существует несколько других методов работы с классом Node.js Buffer.

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