Buffer
Исходный код: lib/buffer.js
Объекты Buffer используются для представления последовательности байтов фиксированной длины. Многие API Node.js поддерживают Buffer.
Класс Buffer является подклассом класса JavaScript Uint8Array и расширяет его методами, охватывающими дополнительные варианты использования. API Node.js также принимают обычные Uint8Array, если поддерживаются Buffer.
Хотя класс Buffer доступен в глобальной области видимости, все же рекомендуется явно ссылаться на него с помощью инструкции import или require.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Creates a zero-filled Buffer of length 10.
const buf1 = Buffer.alloc(10);
// Creates a Buffer of length 10,
// filled with bytes which all have the value `1`.
const buf2 = Buffer.alloc(10, 1);
// Creates an uninitialized buffer of length 10.
// This is faster than calling Buffer.alloc() but the returned
// Buffer instance might contain old data that needs to be
// overwritten using fill(), write(), or other functions that fill the Buffer's
// contents.
const buf3 = Buffer.allocUnsafe(10);
// Creates a Buffer containing the bytes [1, 2, 3].
const buf4 = Buffer.from([1, 2, 3]);
// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries
// are all truncated using `(value & 255)` to fit into the range 0–255.
const buf5 = Buffer.from([257, 257.5, -255, '1']);
// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':
// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)
// [116, 195, 169, 115, 116] (in decimal notation)
const buf6 = Buffer.from('tést');
// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
const buf7 = Buffer.from('tést', 'latin1');CommonJS
const { Buffer } = require('node:buffer');
// Creates a zero-filled Buffer of length 10.
const buf1 = Buffer.alloc(10);
// Creates a Buffer of length 10,
// filled with bytes which all have the value `1`.
const buf2 = Buffer.alloc(10, 1);
// Creates an uninitialized buffer of length 10.
// This is faster than calling Buffer.alloc() but the returned
// Buffer instance might contain old data that needs to be
// overwritten using fill(), write(), or other functions that fill the Buffer's
// contents.
const buf3 = Buffer.allocUnsafe(10);
// Creates a Buffer containing the bytes [1, 2, 3].
const buf4 = Buffer.from([1, 2, 3]);
// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries
// are all truncated using `(value & 255)` to fit into the range 0–255.
const buf5 = Buffer.from([257, 257.5, -255, '1']);
// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':
// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)
// [116, 195, 169, 115, 116] (in decimal notation)
const buf6 = Buffer.from('tést');
// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
const buf7 = Buffer.from('tést', 'latin1');Буферы и кодировки символов
При преобразовании между Buffer и строками можно указать кодировку символов. Если кодировка символов не указана, по умолчанию используется UTF-8.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('hello world', 'utf8');
console.log(buf.toString('hex'));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// Prints: aGVsbG8gd29ybGQ=
console.log(Buffer.from('fhqwhgads', 'utf8'));
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
console.log(Buffer.from('fhqwhgads', 'utf16le'));
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('hello world', 'utf8');
console.log(buf.toString('hex'));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// Prints: aGVsbG8gd29ybGQ=
console.log(Buffer.from('fhqwhgads', 'utf8'));
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
console.log(Buffer.from('fhqwhgads', 'utf16le'));
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>Буферы Node.js принимают строки с кодировками во всех вариантах регистра. Например, UTF-8 можно указать как 'utf8', 'UTF8' или 'uTf8'.
В настоящее время Node.js поддерживает следующие кодировки символов:
-
'utf8'(псевдоним:'utf-8'): многобайтовая кодировка символов Unicode. Многие веб-страницы и другие форматы документов используют UTF-8. Это кодировка символов по умолчанию. При декодированииBufferв строку, не содержащую исключительно корректные данные UTF-8, для представления ошибок будет использоваться символ замены UnicodeU+FFFD�. -
'utf16le'(псевдоним:'utf-16le'): многобайтовая кодировка символов Unicode. В отличие от'utf8', каждый символ строки кодируется двумя или четырьмя байтами. Node.js поддерживает только вариант UTF-16 с порядком байтов от младшего к старшему. -
'latin1': Latin-1 означает ISO-8859-1. Эта кодировка символов поддерживает только символы Unicode в диапазоне отU+0000доU+00FF. Каждый символ кодируется одним байтом. Символы, не попадающие в этот диапазон, усекаются и отображаются как символы из этого диапазона.
Преобразование Buffer в строку с использованием одной из указанных выше кодировок называется декодированием, а преобразование строки в Buffer — кодированием.
Node.js также поддерживает следующие кодировки преобразования двоичных данных в текст. Для таких кодировок принят обратный порядок наименования: преобразование Buffer в строку обычно называется кодированием, а преобразование строки в Buffer — декодированием.
-
'base64': кодировка Base64. При созданииBufferиз строки эта кодировка также корректно принимает «алфавит, безопасный для URL и имен файлов», указанный в RFC 4648, раздел 5. Пробельные символы, например пробелы, табуляции и символы новой строки, содержащиеся в строке, закодированной в base64, игнорируются. -
'base64url': кодировка base64url, определенная в RFC 4648, раздел 5. При созданииBufferиз строки эта кодировка также корректно принимает обычные строки, закодированные в base64. При кодированииBufferв строку эта кодировка не добавляет символы заполнения. -
'hex': кодирует каждый байт двумя шестнадцатеричными символами. При декодировании строк, состоящих не исключительно из четного количества шестнадцатеричных символов, возможно усечение данных. Пример приведен ниже.
Также поддерживаются следующие устаревшие кодировки символов:
-
'ascii': только для 7-битных данных ASCII. При кодировании строки вBufferэто эквивалентно использованию'latin1'. При декодированииBufferв строку эта кодировка дополнительно сбрасывает старший бит каждого байта перед декодированием как'latin1'. Как правило, нет причин использовать эту кодировку, поскольку при кодировании или декодировании текста, содержащего только ASCII, лучше подойдет'utf8'(или, если заведомо известно, что данные содержат только ASCII,'latin1'). Она предоставлена только для обратной совместимости. -
'binary': псевдоним для'latin1'. Название этой кодировки может вводить в заблуждение, поскольку все перечисленные здесь кодировки преобразуют строки и двоичные данные. Для преобразования строк иBufferобычно подходит'utf8'. -
'ucs2','ucs-2': псевдонимы'utf16le'. Ранее UCS-2 обозначал вариант UTF-16, не поддерживавший символы с кодовыми точками больше U+FFFF. В Node.js такие кодовые точки всегда поддерживаются.
Модули JavaScript
import { Buffer } from 'node:buffer';
Buffer.from('1ag123', 'hex');
// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
// ('g') encountered.
Buffer.from('1a7', 'hex');
// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').
Buffer.from('1634', 'hex');
// Prints <Buffer 16 34>, all data represented.CommonJS
const { Buffer } = require('node:buffer');
Buffer.from('1ag123', 'hex');
// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
// ('g') encountered.
Buffer.from('1a7', 'hex');
// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').
Buffer.from('1634', 'hex');
// Prints <Buffer 16 34>, all data represented.Современные веб-браузеры следуют стандарту кодирования WHATWG, который сопоставляет 'latin1' и 'ISO-8859-1' с 'win-1252'. Это означает, что при выполнении чего-либо вроде http.get(), если возвращаемая кодировка указана в спецификации WHATWG, сервер мог фактически вернуть данные в кодировке 'win-1252', и использование кодировки 'latin1' может привести к неправильному декодированию символов.
Буферы и TypedArrays
Экземпляры Buffer также являются экземплярами JavaScript-классов Uint8Array и TypedArray. Все методы TypedArray доступны для Buffer. Однако между API Buffer и API TypedArray есть тонкие различия.
В частности:
- В то время как
TypedArray.prototype.slice()создает копию частиTypedArray,Buffer.prototype.slice()создает представление существующегоBufferбез копирования. Такое поведение может удивить и существует только для обратной совместимости. Для получения поведенияBuffer.prototype.slice()как дляBuffer, так и для другихTypedArrayможно использоватьTypedArray.prototype.subarray(); этому способу следует отдавать предпочтение. -
buf.toString()несовместим с соответствующим методомTypedArray. - Некоторые методы, например
buf.indexOf(), поддерживают дополнительные аргументы.
Существует два способа создать новые экземпляры TypedArray из Buffer:
- Передача
BufferконструкторуTypedArrayскопирует содержимоеBuffer, интерпретируя его как массив целых чисел, а не как последовательность байтов целевого типа.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);
console.log(uint32array);
// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);
console.log(uint32array);
// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]- Передача базового
ArrayBufferобъектаBufferсоздастTypedArray, который будет использовать общую память сBuffer.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('hello', 'utf16le');
const uint16array = new Uint16Array(
buf.buffer,
buf.byteOffset,
buf.length / Uint16Array.BYTES_PER_ELEMENT);
console.log(uint16array);
// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('hello', 'utf16le');
const uint16array = new Uint16Array(
buf.buffer,
buf.byteOffset,
buf.length / Uint16Array.BYTES_PER_ELEMENT);
console.log(uint16array);
// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]Аналогичным способом можно создать новый Buffer, использующий ту же выделенную память, что и экземпляр TypedArray, воспользовавшись свойством .buffer объекта TypedArray. В этом контексте Buffer.from() работает так же, как new Uint8Array().
Модули JavaScript
import { Buffer } from 'node:buffer';
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// Copies the contents of `arr`.
const buf1 = Buffer.from(arr);
// Shares memory with `arr`.
const buf2 = Buffer.from(arr.buffer);
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 a0 0f>
arr[1] = 6000;
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 70 17>CommonJS
const { Buffer } = require('node:buffer');
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// Copies the contents of `arr`.
const buf1 = Buffer.from(arr);
// Shares memory with `arr`.
const buf2 = Buffer.from(arr.buffer);
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 a0 0f>
arr[1] = 6000;
console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 70 17>При создании Buffer с использованием свойства .buffer объекта TypedArray можно использовать только часть базового ArrayBuffer, передав параметры byteOffset и length.
Модули JavaScript
import { Buffer } from 'node:buffer';
const arr = new Uint16Array(20);
const buf = Buffer.from(arr.buffer, 0, 16);
console.log(buf.length);
// Prints: 16CommonJS
const { Buffer } = require('node:buffer');
const arr = new Uint16Array(20);
const buf = Buffer.from(arr.buffer, 0, 16);
console.log(buf.length);
// Prints: 16У Buffer.from() и TypedArray.from() разные сигнатуры и реализации. В частности, варианты TypedArray принимают второй аргумент — функцию отображения, вызываемую для каждого элемента типизированного массива:
TypedArray.from(source[, mapFn[, thisArg]])
Однако метод Buffer.from() не поддерживает использование функции отображения:
Буферы и перебор
Экземпляры Buffer можно перебирать с помощью синтаксиса for..of:
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3]);
for (const b of buf) {
console.log(b);
}
// Prints:
// 1
// 2
// 3CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3]);
for (const b of buf) {
console.log(b);
}
// Prints:
// 1
// 2
// 3Кроме того, для создания итераторов можно использовать методы buf.values(), buf.keys() и buf.entries().
Класс: Blob
Blob инкапсулирует неизменяемые необработанные данные, которыми можно безопасно обмениваться между несколькими потоками-воркерами.
new buffer.Blob([sources[, options]])
-
sources<string[]> | <ArrayBuffer[]> | <TypedArray[]> | <DataView[]> | <Blob[]> Массив строк, объектов <ArrayBuffer>, <TypedArray>, <DataView> или <Blob>, а также любые сочетания таких объектов, которые будут храниться вBlob. -
options<Object>-
endings<string> Одно из значений:'transparent'или'native'. Если задано значение'native', окончания строк в строковых исходных частях будут преобразованы в собственный для платформы вариант окончания строки, указанный вrequire('node:os').EOL. -
type<string> Тип содержимого Blob. Предполагается, чтоtypeуказывает тип MIME-данных, однако формат типа не проверяется.
-
Создает новый объект Blob, содержащий конкатенацию указанных источников.
Источники <ArrayBuffer>, <TypedArray>, <DataView> и <Buffer> копируются в «Blob», поэтому их можно безопасно изменять после создания «Blob».
Строковые источники кодируются как последовательности байтов UTF-8 и копируются в Blob. Несопоставленные суррогатные пары в каждой строковой части заменяются символами замены Unicode U+FFFD.
blob.arrayBuffer()
- Возвращает: <Promise>
Возвращает промис, который выполняется с объектом <ArrayBuffer>, содержащим копию данных Blob.
blob.bytes()
Метод blob.bytes() возвращает байт объекта Blob в виде Promise<Uint8Array>.
const blob = new Blob(['hello']);
blob.bytes().then((bytes) => {
console.log(bytes); // Outputs: Uint8Array(5) [ 104, 101, 108, 108, 111 ]
}); copy
blob.size
Общий размер Blob в байтах.
blob.slice([start[, end[, type]]])
-
start<number> Начальный индекс. -
end<number> Конечный индекс. -
type<string> Тип содержимого новогоBlob
Создает и возвращает новый Blob, содержащий подмножество данных этого объекта Blob. Исходный Blob не изменяется.
blob.stream()
- Возвращает: <ReadableStream>
Возвращает новый ReadableStream, позволяющий считывать содержимое Blob.
blob.text()
- Возвращает: <Promise>
Возвращает промис, который выполняется с содержимым Blob, декодированным в строку UTF-8.
blob.type
- Тип: <string>
Тип содержимого Blob.
Объекты Blob и MessageChannel
После создания объекта <Blob> его можно отправить через MessagePort в несколько мест назначения, не передавая и не копируя данные немедленно. Данные, содержащиеся в Blob, копируются только при вызове методов arrayBuffer() или text().
Модули JavaScript
import { Blob } from 'node:buffer';
import { setTimeout as delay } from 'node:timers/promises';
const blob = new Blob(['hello there']);
const mc1 = new MessageChannel();
const mc2 = new MessageChannel();
mc1.port1.onmessage = async ({ data }) => {
console.log(await data.arrayBuffer());
mc1.port1.close();
};
mc2.port1.onmessage = async ({ data }) => {
await delay(1000);
console.log(await data.arrayBuffer());
mc2.port1.close();
};
mc1.port2.postMessage(blob);
mc2.port2.postMessage(blob);
// The Blob is still usable after posting.
blob.text().then(console.log);CommonJS
const { Blob } = require('node:buffer');
const { setTimeout: delay } = require('node:timers/promises');
const blob = new Blob(['hello there']);
const mc1 = new MessageChannel();
const mc2 = new MessageChannel();
mc1.port1.onmessage = async ({ data }) => {
console.log(await data.arrayBuffer());
mc1.port1.close();
};
mc2.port1.onmessage = async ({ data }) => {
await delay(1000);
console.log(await data.arrayBuffer());
mc2.port1.close();
};
mc1.port2.postMessage(blob);
mc2.port2.postMessage(blob);
// The Blob is still usable after posting.
blob.text().then(console.log);Класс: Buffer
Класс Buffer является глобальным типом для непосредственной работы с двоичными данными. Его можно создать различными способами.
Статический метод: Buffer.alloc(size[, fill[, encoding]])
-
size<integer> Требуемая длина новогоBuffer. -
fill<string> | <Buffer> | <Uint8Array> | <integer> Значение для предварительного заполнения новогоBuffer. По умолчанию:0. -
encoding<string> Еслиfillявляется строкой, указывает её кодировку. По умолчанию:'utf8'. - Возвращает: <Buffer>
Выделяет новый Buffer размером size байт. Если fill равен undefined, Buffer будет заполнен нулями.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(5);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(5);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00>Если size больше buffer.constants.MAX_LENGTH или меньше 0, выбрасывается ERR_OUT_OF_RANGE.
Если указан fill, выделенный Buffer будет инициализирован вызовом buf.fill(fill).
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(5, 'a');
console.log(buf);
// Prints: <Buffer 61 61 61 61 61>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(5, 'a');
console.log(buf);
// Prints: <Buffer 61 61 61 61 61>Если указаны оба аргумента — fill и encoding, выделенный Buffer будет инициализирован вызовом buf.fill(fill, encoding).
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>Вызов Buffer.alloc() может быть заметно медленнее, чем альтернативный вариант Buffer.allocUnsafe(), но гарантирует, что содержимое нового экземпляра Buffer никогда не будет содержать конфиденциальные данные из предыдущих выделений, в том числе данные, которые могли быть выделены не для Bufferов.
Если size не является числом, будет выброшен TypeError.
Статический метод: Buffer.allocUnsafe(size)
Выделяет новый Buffer размером size байт. Если size больше buffer.constants.MAX_LENGTH или меньше 0, выбрасывается ERR_OUT_OF_RANGE.
Базовая память для созданных таким способом экземпляров Buffer не инициализируется. Содержимое нового Buffer неизвестно и может содержать конфиденциальные данные. Вместо этого используйте Buffer.alloc(), чтобы инициализировать экземпляры Buffer нулями.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(10);
console.log(buf);
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
buf.fill(0);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(10);
console.log(buf);
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
buf.fill(0);
console.log(buf);
// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>Если size не является числом, будет выброшен TypeError.
Модуль Buffer предварительно выделяет внутренний экземпляр Buffer размером Buffer.poolSize, который используется в качестве пула для быстрого выделения новых экземпляров Buffer, созданных с помощью Buffer.allocUnsafe(), Buffer.from(array), Buffer.from(string) и Buffer.concat(), только если size меньше Buffer.poolSize >>> 1 (целой части от деления Buffer.poolSize на два).
Использование этого предварительно выделенного внутреннего пула памяти — ключевое отличие вызовов Buffer.alloc(size, fill) и Buffer.allocUnsafe(size).fill(fill). В частности, Buffer.alloc(size, fill) никогда не использует внутренний пул Buffer, тогда как Buffer.allocUnsafe(size).fill(fill) использует внутренний пул Buffer, если size меньше или равен половине Buffer.poolSize. Разница невелика, но может быть важна, если приложению требуется дополнительная производительность, которую обеспечивает Buffer.allocUnsafe().
Статический метод: Buffer.allocUnsafeSlow(size)
Выделяет новый Buffer размером size байт. Если size больше buffer.constants.MAX_LENGTH или меньше 0, выбрасывается ERR_OUT_OF_RANGE. Если size равен 0, создаётся Buffer нулевой длины.
Базовая память для созданных таким способом экземпляров Buffer не инициализируется. Содержимое нового Buffer неизвестно и может содержать конфиденциальные данные. Используйте buf.fill(0), чтобы инициализировать такие экземпляры Buffer нулями.
При использовании Buffer.allocUnsafe() для выделения новых экземпляров Buffer выделения размером менее Buffer.poolSize >>> 1 (4 КиБ при использовании значения poolSize по умолчанию) берутся из одного предварительно выделенного Buffer. Это позволяет приложениям избежать накладных расходов на сборку мусора, возникающих при создании множества отдельно выделенных экземпляров Buffer. Такой подход повышает производительность и снижает потребление памяти, поскольку нет необходимости отслеживать и очищать большое количество отдельных объектов ArrayBuffer.
Однако, если разработчику может потребоваться сохранить небольшой участок памяти из пула на неопределённый срок, лучше создать экземпляр Buffer вне пула с помощью Buffer.allocUnsafeSlow(), а затем скопировать нужные данные.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Need to keep around a few small chunks of memory.
const store = [];
socket.on('readable', () => {
let data;
while (null !== (data = readable.read())) {
// Allocate for retained data.
const sb = Buffer.allocUnsafeSlow(10);
// Copy the data into the new allocation.
data.copy(sb, 0, 0, 10);
store.push(sb);
}
});CommonJS
const { Buffer } = require('node:buffer');
// Need to keep around a few small chunks of memory.
const store = [];
socket.on('readable', () => {
let data;
while (null !== (data = readable.read())) {
// Allocate for retained data.
const sb = Buffer.allocUnsafeSlow(10);
// Copy the data into the new allocation.
data.copy(sb, 0, 0, 10);
store.push(sb);
}
});Если size не является числом, будет выброшен TypeError.
Статический метод: Buffer.byteLength(string[, encoding])
-
string<string> | <Buffer> | <TypedArray> | <DataView> | <ArrayBuffer> | <SharedArrayBuffer> Значение, длину которого нужно вычислить. -
encoding<string> Еслиstringявляется строкой, указывает её кодировку. По умолчанию:'utf8'. - Возвращает: <integer> Количество байт в
string.
Возвращает длину строки в байтах при кодировании с помощью encoding. Она отличается от String.prototype.length, которая не учитывает кодировку, используемую для преобразования строки в байты.
Для 'base64', 'base64url' и 'hex' эта функция предполагает, что входные данные корректны. Для строк, содержащих данные, не закодированные в base64 или hex (например, пробелы), возвращаемое значение может превышать длину Buffer, созданного из этой строки.
Модули JavaScript
import { Buffer } from 'node:buffer';
const str = '\u00bd + \u00bc = \u00be';
console.log(`${str}: ${str.length} characters, ` +
`${Buffer.byteLength(str, 'utf8')} bytes`);
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytesCommonJS
const { Buffer } = require('node:buffer');
const str = '\u00bd + \u00bc = \u00be';
console.log(`${str}: ${str.length} characters, ` +
`${Buffer.byteLength(str, 'utf8')} bytes`);
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytesЕсли string является Buffer/DataView/TypedArray/ArrayBuffer/ SharedArrayBuffer, возвращается длина в байтах, указанная в .byteLength.
Статический метод: Buffer.compare(buf1, buf2)
-
buf1<Buffer> | <Uint8Array> -
buf2<Buffer> | <Uint8Array> - Возвращает: <integer>
-1,0или1в зависимости от результата сравнения. Подробности см. в разделеbuf.compare().
Сравнивает buf1 с buf2, обычно для сортировки массивов экземпляров Buffer. Эквивалентно вызову buf1.compare(buf2).
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('1234');
const buf2 = Buffer.from('0123');
const arr = [buf1, buf2];
console.log(arr.sort(Buffer.compare));
// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
// (This result is equal to: [buf2, buf1].)CommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('1234');
const buf2 = Buffer.from('0123');
const arr = [buf1, buf2];
console.log(arr.sort(Buffer.compare));
// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
// (This result is equal to: [buf2, buf1].)Статический метод: Buffer.concat(list[, totalLength])
-
list<Buffer[]> | <Uint8Array[]> Список экземпляровBufferилиUint8Arrayдля объединения. -
totalLength<integer> Общая длина экземпляровBufferвlistпосле объединения. - Возвращает: <Buffer>
Возвращает новый Buffer, полученный в результате объединения всех экземпляров Buffer из list.
Если список пуст или totalLength равен 0, возвращается новый Buffer нулевой длины.
Если totalLength не указан, он вычисляется путём сложения длин экземпляров Buffer из list.
Если totalLength указан, он преобразуется в беззнаковое целое число. Если суммарная длина Bufferов из list превышает totalLength, результат усекается до totalLength. Если суммарная длина Bufferов из list меньше totalLength, оставшееся пространство заполняется нулями.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Create a single `Buffer` from a list of three `Buffer` instances.
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;
console.log(totalLength);
// Prints: 42
const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
console.log(bufA);
// Prints: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// Prints: 42CommonJS
const { Buffer } = require('node:buffer');
// Create a single `Buffer` from a list of three `Buffer` instances.
const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;
console.log(totalLength);
// Prints: 42
const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
console.log(bufA);
// Prints: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// Prints: 42Buffer.concat() также может использовать внутренний пул Buffer, как это делает Buffer.allocUnsafe().
Статический метод: Buffer.copyBytesFrom(view[, offset[, length]])
-
view<TypedArray> Массив <TypedArray> для копирования. -
offset<integer> Начальное смещение вview. По умолчанию:0. -
length<integer> Количество элементов для копирования изview. По умолчанию:view.length - offset. - Возвращает: <Buffer>
Копирует базовую память view в новый Buffer.
const u16 = new Uint16Array([0, 0xffff]); const buf = Buffer.copyBytesFrom(u16, 1, 1); u16[1] = 0; console.log(buf.length); // 2 console.log(buf[0]); // 255 console.log(buf[1]); // 255 copy
Статический метод: Buffer.from(array)
-
array<integer[]> - Возвращает: <Buffer>
Выделяет новый Buffer, используя массив array байт в диапазоне от 0 до 255. Элементы массива за пределами этого диапазона усекаются до допустимых значений.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);CommonJS
const { Buffer } = require('node:buffer');
// Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);Если array является объектом, подобным Array (то есть имеет свойство length типа number), он обрабатывается как массив, если только не является Buffer или Uint8Array. Это означает, что все остальные варианты TypedArray рассматриваются как Array. Чтобы создать Buffer из байтов, на которых основан TypedArray, используйте Buffer.copyBytesFrom().
Если array не является Array или другим типом, подходящим для вариантов Buffer.from(), будет выброшен TypeError.
Buffer.from(array) и Buffer.from(string) также могут использовать внутренний пул Buffer, как это делает Buffer.allocUnsafe().
Статический метод: Buffer.from(arrayBuffer[, byteOffset[, length]])
-
arrayBuffer<ArrayBuffer> | <SharedArrayBuffer> ОбъектArrayBufferилиSharedArrayBuffer, например свойство.bufferобъектаTypedArray. -
byteOffset<integer> Индекс первого доступного байта. По умолчанию:0. -
length<integer> Количество доступных байт. По умолчанию:arrayBuffer.byteLength - byteOffset. - Возвращает: <Buffer>
Создаёт представление ArrayBuffer без копирования базовой памяти. Например, если передать ссылку на свойство .buffer экземпляра TypedArray, вновь созданный Buffer будет использовать ту же выделенную память, что и базовый ArrayBuffer объекта TypedArray.
Модули JavaScript
import { Buffer } from 'node:buffer';
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// Shares memory with `arr`.
const buf = Buffer.from(arr.buffer);
console.log(buf);
// Prints: <Buffer 88 13 a0 0f>
// Changing the original Uint16Array changes the Buffer also.
arr[1] = 6000;
console.log(buf);
// Prints: <Buffer 88 13 70 17>CommonJS
const { Buffer } = require('node:buffer');
const arr = new Uint16Array(2);
arr[0] = 5000;
arr[1] = 4000;
// Shares memory with `arr`.
const buf = Buffer.from(arr.buffer);
console.log(buf);
// Prints: <Buffer 88 13 a0 0f>
// Changing the original Uint16Array changes the Buffer also.
arr[1] = 6000;
console.log(buf);
// Prints: <Buffer 88 13 70 17>Необязательные аргументы byteOffset и length задают диапазон памяти внутри arrayBuffer, совместно используемый Buffer.
Модули JavaScript
import { Buffer } from 'node:buffer';
const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);
console.log(buf.length);
// Prints: 2CommonJS
const { Buffer } = require('node:buffer');
const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);
console.log(buf.length);
// Prints: 2Если arrayBuffer не является объектом ArrayBuffer, объектом SharedArrayBuffer или другим типом, подходящим для вариантов Buffer.from(), будет выброшен TypeError.
Важно помнить, что базовый ArrayBuffer может охватывать диапазон памяти, выходящий за границы представления TypedArray. Новый Buffer, созданный с использованием свойства buffer объекта TypedArray, может выходить за пределы диапазона TypedArray:
Модули JavaScript
import { Buffer } from 'node:buffer';
const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
console.log(arrA.buffer === arrB.buffer); // true
const buf = Buffer.from(arrB.buffer);
console.log(buf);
// Prints: <Buffer 63 64 65 66>CommonJS
const { Buffer } = require('node:buffer');
const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
console.log(arrA.buffer === arrB.buffer); // true
const buf = Buffer.from(arrB.buffer);
console.log(buf);
// Prints: <Buffer 63 64 65 66>Статический метод: Buffer.from(buffer)
-
buffer<Buffer> | <Uint8Array> СуществующийBufferилиUint8Array, из которого копируются данные. - Возвращает: <Buffer>
Копирует переданные данные buffer в новый экземпляр Buffer.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('buffer');
const buf2 = Buffer.from(buf1);
buf1[0] = 0x61;
console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: bufferCommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('buffer');
const buf2 = Buffer.from(buf1);
buf1[0] = 0x61;
console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: bufferЕсли buffer не является Buffer или другим типом, подходящим для вариантов Buffer.from(), будет выброшен TypeError.
Статический метод: Buffer.from(object[, offsetOrEncoding[, length]])
-
object<Object> Объект, поддерживающийSymbol.toPrimitiveилиvalueOf(). -
offsetOrEncoding<integer> | <string> Смещение в байтах или кодировка. -
length<integer> Длина. - Возвращает: <Buffer>
Для объектов, функция valueOf() которых возвращает значение, строго не равное object, возвращает Buffer.from(object.valueOf(), offsetOrEncoding, length).
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from(new String('this is a test'));
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from(new String('this is a test'));
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>Для объектов, поддерживающих Symbol.toPrimitive, возвращает Buffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding).
Модули JavaScript
import { Buffer } from 'node:buffer';
class Foo {
[Symbol.toPrimitive]() {
return 'this is a test';
}
}
const buf = Buffer.from(new Foo(), 'utf8');
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>CommonJS
const { Buffer } = require('node:buffer');
class Foo {
[Symbol.toPrimitive]() {
return 'this is a test';
}
}
const buf = Buffer.from(new Foo(), 'utf8');
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>Если object не имеет указанных методов или не относится к другому типу, подходящему для вариантов Buffer.from(), будет выброшен TypeError.
Статический метод: Buffer.from(string[, encoding])
-
string<string> Строка для кодирования. -
encoding<string> Кодировкаstring. По умолчанию:'utf8'. - Возвращает: <Buffer>
Создаёт новый Buffer, содержащий string. Параметр encoding указывает кодировку символов, используемую при преобразовании string в байты.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf1.toString());
// Prints: this is a tést
console.log(buf2.toString());
// Prints: this is a tést
console.log(buf1.toString('latin1'));
// Prints: this is a téstCommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
console.log(buf1.toString());
// Prints: this is a tést
console.log(buf2.toString());
// Prints: this is a tést
console.log(buf1.toString('latin1'));
// Prints: this is a téstЕсли string не является строкой или другим типом, подходящим для вариантов Buffer.from(), будет выброшен TypeError.
Buffer.from(string) также может использовать внутренний пул Buffer, как это делает Buffer.allocUnsafe().
Статический метод: Buffer.isBuffer(obj)
Возвращает true, если obj является Buffer, в противном случае возвращает false.
Модули JavaScript
import { Buffer } from 'node:buffer';
Buffer.isBuffer(Buffer.alloc(10)); // true
Buffer.isBuffer(Buffer.from('foo')); // true
Buffer.isBuffer('a string'); // false
Buffer.isBuffer([]); // false
Buffer.isBuffer(new Uint8Array(1024)); // falseCommonJS
const { Buffer } = require('node:buffer');
Buffer.isBuffer(Buffer.alloc(10)); // true
Buffer.isBuffer(Buffer.from('foo')); // true
Buffer.isBuffer('a string'); // false
Buffer.isBuffer([]); // false
Buffer.isBuffer(new Uint8Array(1024)); // falseСтатический метод: Buffer.isEncoding(encoding)
Возвращает true, если encoding является названием поддерживаемой кодировки символов, иначе возвращает false.
Модули JavaScript
import { Buffer } from 'node:buffer';
console.log(Buffer.isEncoding('utf8'));
// Prints: true
console.log(Buffer.isEncoding('hex'));
// Prints: true
console.log(Buffer.isEncoding('utf/8'));
// Prints: false
console.log(Buffer.isEncoding(''));
// Prints: falseCommonJS
const { Buffer } = require('node:buffer');
console.log(Buffer.isEncoding('utf8'));
// Prints: true
console.log(Buffer.isEncoding('hex'));
// Prints: true
console.log(Buffer.isEncoding('utf/8'));
// Prints: false
console.log(Buffer.isEncoding(''));
// Prints: falseСвойство класса: Buffer.poolSize
-
<integer> По умолчанию:
8192
Размер (в байтах) предварительно выделяемых внутренних экземпляров Buffer, используемых для создания пула. Это значение можно изменить.
buf[index]
-
index<integer>
Оператор индекса [index] можно использовать для получения и установки октета в позиции index в buf. Значения относятся к отдельным байтам, поэтому допустимый диапазон значений составляет от 0x00 до 0xFF (в шестнадцатеричной системе) или от 0 до 255 (в десятичной системе).
Этот оператор наследуется от Uint8Array, поэтому его поведение при доступе за пределами допустимого диапазона такое же, как у Uint8Array. Иными словами, buf[index] возвращает undefined, если index отрицательно или больше либо равно buf.length, а buf[index] = value не изменяет буфер, если index отрицательно или >= buf.length.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Copy an ASCII string into a `Buffer` one byte at a time.
// (This only works for ASCII-only strings. In general, one should use
// `Buffer.from()` to perform this conversion.)
const str = 'Node.js';
const buf = Buffer.allocUnsafe(str.length);
for (let i = 0; i < str.length; i++) {
buf[i] = str.charCodeAt(i);
}
console.log(buf.toString('utf8'));
// Prints: Node.jsCommonJS
const { Buffer } = require('node:buffer');
// Copy an ASCII string into a `Buffer` one byte at a time.
// (This only works for ASCII-only strings. In general, one should use
// `Buffer.from()` to perform this conversion.)
const str = 'Node.js';
const buf = Buffer.allocUnsafe(str.length);
for (let i = 0; i < str.length; i++) {
buf[i] = str.charCodeAt(i);
}
console.log(buf.toString('utf8'));
// Prints: Node.js
buf.buffer
-
<ArrayBuffer> Базовый объект
ArrayBuffer, на основе которого создан этот объектBuffer.
Не гарантируется, что этот ArrayBuffer в точности соответствует исходному Buffer. Подробности см. в примечаниях к buf.byteOffset.
Модули JavaScript
import { Buffer } from 'node:buffer';
const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);
// Prints: trueCommonJS
const { Buffer } = require('node:buffer');
const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);
// Prints: true
buf.byteOffset
-
<integer> Смещение
byteOffsetбазового объектаArrayBuffer, на который ссылаютсяBuffer.
При установке byteOffset в Buffer.from(ArrayBuffer, byteOffset, length) или иногда при выделении Buffer размером меньше Buffer.poolSize буфер начинается не с нулевого смещения в базовом ArrayBuffer.
Это может вызвать проблемы при прямом доступе к базовому ArrayBuffer с помощью buf.buffer, поскольку другие части ArrayBuffer могут не иметь отношения к самому объекту Buffer.
Распространённая проблема при создании объекта TypedArray, разделяющего память с Buffer, заключается в том, что в этом случае необходимо правильно указать byteOffset:
Модули JavaScript
import { Buffer } from 'node:buffer';
// Create a buffer smaller than `Buffer.poolSize`.
const nodeBuffer = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
// When casting the Node.js Buffer to an Int8Array, use the byteOffset
// to refer only to the part of `nodeBuffer.buffer` that contains the memory
// for `nodeBuffer`.
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);CommonJS
const { Buffer } = require('node:buffer');
// Create a buffer smaller than `Buffer.poolSize`.
const nodeBuffer = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
// When casting the Node.js Buffer to an Int8Array, use the byteOffset
// to refer only to the part of `nodeBuffer.buffer` that contains the memory
// for `nodeBuffer`.
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);
buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
-
target<Buffer> | <Uint8Array> ОбъектBufferилиUint8Array, с которым сравниваетсяbuf. -
targetStart<integer> Смещение вtarget, с которого начинается сравнение. По умолчанию:0. -
targetEnd<integer> Смещение вtarget, на котором заканчивается сравнение (не включительно). По умолчанию:target.length. -
sourceStart<integer> Смещение вbuf, с которого начинается сравнение. По умолчанию:0. -
sourceEnd<integer> Смещение вbuf, на котором заканчивается сравнение (не включительно). По умолчанию:buf.length. - Возвращает: <integer>
Сравнивает buf с target и возвращает число, указывающее, стоит ли buf в порядке сортировки перед target, после него или на той же позиции. Сравнение основано на фактической последовательности байтов в каждом Buffer.
-
Возвращается
0, еслиtargetсовпадает сbuf -
Возвращается
1, если при сортировкеtargetдолжно идти передbuf. -
Возвращается
-1, если при сортировкеtargetдолжно идти послеbuf.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('BCD');
const buf3 = Buffer.from('ABCD');
console.log(buf1.compare(buf1));
// Prints: 0
console.log(buf1.compare(buf2));
// Prints: -1
console.log(buf1.compare(buf3));
// Prints: -1
console.log(buf2.compare(buf1));
// Prints: 1
console.log(buf2.compare(buf3));
// Prints: 1
console.log([buf1, buf2, buf3].sort(Buffer.compare));
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
// (This result is equal to: [buf1, buf3, buf2].)CommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('BCD');
const buf3 = Buffer.from('ABCD');
console.log(buf1.compare(buf1));
// Prints: 0
console.log(buf1.compare(buf2));
// Prints: -1
console.log(buf1.compare(buf3));
// Prints: -1
console.log(buf2.compare(buf1));
// Prints: 1
console.log(buf2.compare(buf3));
// Prints: 1
console.log([buf1, buf2, buf3].sort(Buffer.compare));
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
// (This result is equal to: [buf1, buf3, buf2].)Необязательные аргументы targetStart, targetEnd, sourceStart и sourceEnd можно использовать, чтобы ограничить сравнение определёнными диапазонами в target и buf соответственно.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
console.log(buf1.compare(buf2, 5, 9, 0, 4));
// Prints: 0
console.log(buf1.compare(buf2, 0, 6, 4));
// Prints: -1
console.log(buf1.compare(buf2, 5, 6, 5));
// Prints: 1CommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);
console.log(buf1.compare(buf2, 5, 9, 0, 4));
// Prints: 0
console.log(buf1.compare(buf2, 0, 6, 4));
// Prints: -1
console.log(buf1.compare(buf2, 5, 6, 5));
// Prints: 1Возникает ошибка ERR_OUT_OF_RANGE, если targetStart < 0, sourceStart < 0, targetEnd > target.byteLength или sourceEnd > source.byteLength.
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
-
target<Buffer> | <Uint8Array> ОбъектBufferилиUint8Array, в который копируются данные. -
targetStart<integer> Смещение вtarget, с которого начинается запись. По умолчанию:0. -
sourceStart<integer> Смещение вbuf, с которого начинается копирование. По умолчанию:0. -
sourceEnd<integer> Смещение вbuf, на котором заканчивается копирование (не включительно). По умолчанию:buf.length. - Возвращает: <integer> Количество скопированных байтов.
Копирует данные из области buf в область target, даже если область памяти target перекрывается с buf.
TypedArray.prototype.set() выполняет ту же операцию и доступен для всех TypedArray, включая объекты Buffer Node.js, хотя принимает другие аргументы функции.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Create two `Buffer` instances.
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
buf1.copy(buf2, 8, 16, 20);
// This is equivalent to:
// buf2.set(buf1.subarray(16, 20), 8);
console.log(buf2.toString('ascii', 0, 25));
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!CommonJS
const { Buffer } = require('node:buffer');
// Create two `Buffer` instances.
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
buf1.copy(buf2, 8, 16, 20);
// This is equivalent to:
// buf2.set(buf1.subarray(16, 20), 8);
console.log(buf2.toString('ascii', 0, 25));
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!Модули JavaScript
import { Buffer } from 'node:buffer';
// Create a `Buffer` and copy data from one region to an overlapping region
// within the same `Buffer`.
const buf = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf[i] = i + 97;
}
buf.copy(buf, 0, 4, 10);
console.log(buf.toString());
// Prints: efghijghijklmnopqrstuvwxyzCommonJS
const { Buffer } = require('node:buffer');
// Create a `Buffer` and copy data from one region to an overlapping region
// within the same `Buffer`.
const buf = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf[i] = i + 97;
}
buf.copy(buf, 0, 4, 10);
console.log(buf.toString());
// Prints: efghijghijklmnopqrstuvwxyz
buf.entries()
- Возвращает: <Iterator>
Создаёт и возвращает итератор пар [index, byte] из содержимого buf.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Log the entire contents of a `Buffer`.
const buf = Buffer.from('buffer');
for (const pair of buf.entries()) {
console.log(pair);
}
// Prints:
// [0, 98]
// [1, 117]
// [2, 102]
// [3, 102]
// [4, 101]
// [5, 114]CommonJS
const { Buffer } = require('node:buffer');
// Log the entire contents of a `Buffer`.
const buf = Buffer.from('buffer');
for (const pair of buf.entries()) {
console.log(pair);
}
// Prints:
// [0, 98]
// [1, 117]
// [2, 102]
// [3, 102]
// [4, 101]
// [5, 114]
buf.equals(otherBuffer)
-
otherBuffer<Buffer> | <Uint8Array> ОбъектBufferилиUint8Array, с которым сравниваетсяbuf. - Возвращает: <boolean>
Возвращает true, если buf и otherBuffer содержат в точности одинаковые байты, и false в противном случае. Эквивалентно buf.compare(otherBuffer) === 0.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1.equals(buf2));
// Prints: true
console.log(buf1.equals(buf3));
// Prints: falseCommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1.equals(buf2));
// Prints: true
console.log(buf1.equals(buf3));
// Prints: false
buf.fill(value[, offset[, end]][, encoding])
-
value<string> | <Buffer> | <Uint8Array> | <integer> Значение, которым заполняетсяbuf. Пустое значение (строка, Uint8Array, Buffer) преобразуется в0. -
offset<integer> Количество байтов, пропускаемых перед началом заполненияbuf. По умолчанию:0. -
end<integer> Позиция, на которой прекращается заполнениеbuf(не включительно). По умолчанию:buf.length. -
encoding<string> Кодировка дляvalue, еслиvalueявляется строкой. По умолчанию:'utf8'. - Возвращает: <Buffer> Ссылку на
buf.
Заполняет buf указанным значением value. Если offset и end не заданы, заполняется весь buf:
Модули JavaScript
import { Buffer } from 'node:buffer';
// Fill a `Buffer` with the ASCII character 'h'.
const b = Buffer.allocUnsafe(50).fill('h');
console.log(b.toString());
// Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
// Fill a buffer with empty string
const c = Buffer.allocUnsafe(5).fill('');
console.log(c.fill(''));
// Prints: <Buffer 00 00 00 00 00>CommonJS
const { Buffer } = require('node:buffer');
// Fill a `Buffer` with the ASCII character 'h'.
const b = Buffer.allocUnsafe(50).fill('h');
console.log(b.toString());
// Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
// Fill a buffer with empty string
const c = Buffer.allocUnsafe(5).fill('');
console.log(c.fill(''));
// Prints: <Buffer 00 00 00 00 00>Если value не является строкой, Buffer или целым числом, оно преобразуется в значение uint32. Если полученное целое число больше 255 (в десятичной системе), buf будет заполнен значением value & 255.
Если последняя запись операции fill() приходится на многобайтовый символ, записываются только байты этого символа, которые помещаются в buf:
Модули JavaScript
import { Buffer } from 'node:buffer';
// Fill a `Buffer` with character that takes up two bytes in UTF-8.
console.log(Buffer.allocUnsafe(5).fill('\u0222'));
// Prints: <Buffer c8 a2 c8 a2 c8>CommonJS
const { Buffer } = require('node:buffer');
// Fill a `Buffer` with character that takes up two bytes in UTF-8.
console.log(Buffer.allocUnsafe(5).fill('\u0222'));
// Prints: <Buffer c8 a2 c8 a2 c8>Если value содержит недопустимые символы, оно усекается; если после этого не остаётся допустимых данных для заполнения, возникает исключение:
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(5);
console.log(buf.fill('a'));
// Prints: <Buffer 61 61 61 61 61>
console.log(buf.fill('aazz', 'hex'));
// Prints: <Buffer aa aa aa aa aa>
console.log(buf.fill('zz', 'hex'));
// Throws an exception.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(5);
console.log(buf.fill('a'));
// Prints: <Buffer 61 61 61 61 61>
console.log(buf.fill('aazz', 'hex'));
// Prints: <Buffer aa aa aa aa aa>
console.log(buf.fill('zz', 'hex'));
// Throws an exception.
buf.includes(value[, byteOffset][, encoding])
-
value<string> | <Buffer> | <Uint8Array> | <integer> Искомое значение. -
byteOffset<integer> Позиция, с которой начинается поиск вbuf. Если значение отрицательное, смещение вычисляется от концаbuf. По умолчанию:0. -
encoding<string> Еслиvalueявляется строкой, это её кодировка. По умолчанию:'utf8'. - Возвращает: <boolean>
true, еслиvalueнайдено вbuf, иfalseв противном случае.
Эквивалентно buf.indexOf() !== -1.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('this is a buffer');
console.log(buf.includes('this'));
// Prints: true
console.log(buf.includes('is'));
// Prints: true
console.log(buf.includes(Buffer.from('a buffer')));
// Prints: true
console.log(buf.includes(97));
// Prints: true (97 is the decimal ASCII value for 'a')
console.log(buf.includes(Buffer.from('a buffer example')));
// Prints: false
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
// Prints: true
console.log(buf.includes('this', 4));
// Prints: falseCommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('this is a buffer');
console.log(buf.includes('this'));
// Prints: true
console.log(buf.includes('is'));
// Prints: true
console.log(buf.includes(Buffer.from('a buffer')));
// Prints: true
console.log(buf.includes(97));
// Prints: true (97 is the decimal ASCII value for 'a')
console.log(buf.includes(Buffer.from('a buffer example')));
// Prints: false
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
// Prints: true
console.log(buf.includes('this', 4));
// Prints: false
buf.indexOf(value[, byteOffset][, encoding])
-
value<string> | <Buffer> | <Uint8Array> | <integer> Искомое значение. -
byteOffset<integer> Позиция, с которой начинается поиск вbuf. Если значение отрицательное, смещение вычисляется от концаbuf. По умолчанию:0. -
encoding<string> Еслиvalueявляется строкой, это кодировка, используемая для определения двоичного представления строки, которая будет искаться вbuf. По умолчанию:'utf8'. - Возвращает: <integer> Индекс первого вхождения
valueвbufили-1, еслиbufне содержитvalue.
Если value является:
- строкой,
valueинтерпретируется в соответствии с кодировкой символов вencoding. - объектом
BufferилиUint8Array,valueиспользуется целиком. Чтобы сравнить частьBuffer, используйтеbuf.subarray. - числом,
valueинтерпретируется как 8-битное беззнаковое целое значение от0до255.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('this is a buffer');
console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('this is a buffer');
console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6Если value не является строкой, числом или Buffer, этот метод вызовет ошибку TypeError. Если value является числом, оно будет преобразовано в допустимое значение байта — целое число от 0 до 255.
Если byteOffset не является числом, оно будет преобразовано в число. Если результат преобразования равен NaN или 0, поиск будет выполнен по всему буферу. Это поведение соответствует String.prototype.indexOf().
Модули JavaScript
import { Buffer } from 'node:buffer';
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));
// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));CommonJS
const { Buffer } = require('node:buffer');
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));
// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));Если value — пустая строка или пустой Buffer, а byteOffset меньше buf.length, будет возвращено byteOffset. Если value пуст, а byteOffset больше или равно buf.length, будет возвращено buf.length.
buf.keys()
- Возвращает: <Iterator>
Создаёт и возвращает итератор ключей buf (индексов).
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
for (const key of buf.keys()) {
console.log(key);
}
// Prints:
// 0
// 1
// 2
// 3
// 4
// 5CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
for (const key of buf.keys()) {
console.log(key);
}
// Prints:
// 0
// 1
// 2
// 3
// 4
// 5
buf.lastIndexOf(value[, byteOffset][, encoding])
-
value<string> | <Buffer> | <Uint8Array> | <integer> Искомое значение. -
byteOffset<integer> Позиция, с которой начинается поиск вbuf. Если значение отрицательное, смещение вычисляется от концаbuf. По умолчанию:buf.length - 1. -
encoding<string> Еслиvalueявляется строкой, это кодировка, используемая для определения двоичного представления строки, которая будет искаться вbuf. По умолчанию:'utf8'. - Возвращает: <integer> Индекс последнего вхождения
valueвbufили-1, еслиbufне содержитvalue.
Идентичен buf.indexOf(), за исключением того, что находится последнее, а не первое вхождение value.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('this buffer is a buffer');
console.log(buf.lastIndexOf('this'));
// Prints: 0
console.log(buf.lastIndexOf('buffer'));
// Prints: 17
console.log(buf.lastIndexOf(Buffer.from('buffer')));
// Prints: 17
console.log(buf.lastIndexOf(97));
// Prints: 15 (97 is the decimal ASCII value for 'a')
console.log(buf.lastIndexOf(Buffer.from('yolo')));
// Prints: -1
console.log(buf.lastIndexOf('buffer', 5));
// Prints: 5
console.log(buf.lastIndexOf('buffer', 4));
// Prints: -1
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
// Prints: 6
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
// Prints: 4CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('this buffer is a buffer');
console.log(buf.lastIndexOf('this'));
// Prints: 0
console.log(buf.lastIndexOf('buffer'));
// Prints: 17
console.log(buf.lastIndexOf(Buffer.from('buffer')));
// Prints: 17
console.log(buf.lastIndexOf(97));
// Prints: 15 (97 is the decimal ASCII value for 'a')
console.log(buf.lastIndexOf(Buffer.from('yolo')));
// Prints: -1
console.log(buf.lastIndexOf('buffer', 5));
// Prints: 5
console.log(buf.lastIndexOf('buffer', 4));
// Prints: -1
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
// Prints: 6
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
// Prints: 4Если value не является строкой, числом или Buffer, этот метод вызовет ошибку TypeError. Если value является числом, оно будет преобразовано в допустимое значение байта — целое число от 0 до 255.
Если byteOffset не является числом, оно будет преобразовано в число. Любые аргументы, которые преобразуются в NaN, например {} или undefined, приводят к поиску по всему буферу. Это поведение соответствует String.prototype.lastIndexOf().
Модули JavaScript
import { Buffer } from 'node:buffer';
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.lastIndexOf(99.9));
console.log(b.lastIndexOf(256 + 99));
// Passing a byteOffset that coerces to NaN.
// Prints: 1, searching the whole buffer.
console.log(b.lastIndexOf('b', undefined));
console.log(b.lastIndexOf('b', {}));
// Passing a byteOffset that coerces to 0.
// Prints: -1, equivalent to passing 0.
console.log(b.lastIndexOf('b', null));
console.log(b.lastIndexOf('b', []));CommonJS
const { Buffer } = require('node:buffer');
const b = Buffer.from('abcdef');
// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.lastIndexOf(99.9));
console.log(b.lastIndexOf(256 + 99));
// Passing a byteOffset that coerces to NaN.
// Prints: 1, searching the whole buffer.
console.log(b.lastIndexOf('b', undefined));
console.log(b.lastIndexOf('b', {}));
// Passing a byteOffset that coerces to 0.
// Prints: -1, equivalent to passing 0.
console.log(b.lastIndexOf('b', null));
console.log(b.lastIndexOf('b', []));Если value — пустая строка или пустой Buffer, будет возвращено byteOffset.
buf.length
Возвращает количество байтов в buf.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Create a `Buffer` and write a shorter string to it using UTF-8.
const buf = Buffer.alloc(1234);
console.log(buf.length);
// Prints: 1234
buf.write('some string', 0, 'utf8');
console.log(buf.length);
// Prints: 1234CommonJS
const { Buffer } = require('node:buffer');
// Create a `Buffer` and write a shorter string to it using UTF-8.
const buf = Buffer.alloc(1234);
console.log(buf.length);
// Prints: 1234
buf.write('some string', 0, 'utf8');
console.log(buf.length);
// Prints: 1234
buf.parent
buf.buffer.Свойство buf.parent является устаревшим псевдонимом buf.buffer.
buf.readBigInt64BE([offset])
-
offset<integer> Количество байтов, пропускаемых перед началом чтения. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <bigint>
Читает знаковое 64-битное целое число в порядке от старшего байта к младшему из buf по указанному offset.
Целые числа, прочитанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
buf.readBigInt64LE([offset])
-
offset<integer> Количество байтов, пропускаемых перед началом чтения. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <bigint>
Читает знаковое 64-битное целое число в порядке от младшего байта к старшему из buf по указанному offset.
Целые числа, прочитанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
buf.readBigUInt64BE([offset])
-
offset<integer> Количество байтов, пропускаемых перед началом чтения. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <bigint>
Читает беззнаковое 64-битное целое число в порядке от старшего байта к младшему из buf по указанному offset.
Эта функция также доступна под псевдонимом readBigUint64BE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64BE(0));
// Prints: 4294967295nCommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64BE(0));
// Prints: 4294967295n
buf.readBigUInt64LE([offset])
-
offset<integer> Количество байтов, пропускаемых перед началом чтения. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <bigint>
Читает беззнаковое 64-битное целое число в порядке от младшего байта к старшему из buf по указанному offset.
Эта функция также доступна под псевдонимом readBigUint64LE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64LE(0));
// Prints: 18446744069414584320nCommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
console.log(buf.readBigUInt64LE(0));
// Prints: 18446744069414584320n
buf.readDoubleBE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <number>
Читает 64-битное число с плавающей запятой в формате с прямым порядком байтов из buf по указанному offset.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleBE(0));
// Prints: 8.20788039913184e-304CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleBE(0));
// Prints: 8.20788039913184e-304
buf.readDoubleLE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <number>
Читает 64-битное число с плавающей запятой в формате с обратным порядком байтов из buf по указанному offset.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleLE(0));
// Prints: 5.447603722011605e-270
console.log(buf.readDoubleLE(1));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
console.log(buf.readDoubleLE(0));
// Prints: 5.447603722011605e-270
console.log(buf.readDoubleLE(1));
// Throws ERR_OUT_OF_RANGE.
buf.readFloatBE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <number>
Читает 32-битное число с плавающей запятой в формате с прямым порядком байтов из buf по указанному offset.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatBE(0));
// Prints: 2.387939260590663e-38CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatBE(0));
// Prints: 2.387939260590663e-38
buf.readFloatLE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <number>
Читает 32-битное число с плавающей запятой в формате с обратным порядком байтов из buf по указанному offset.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatLE(0));
// Prints: 1.539989614439558e-36
console.log(buf.readFloatLE(1));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, 2, 3, 4]);
console.log(buf.readFloatLE(0));
// Prints: 1.539989614439558e-36
console.log(buf.readFloatLE(1));
// Throws ERR_OUT_OF_RANGE.
buf.readInt8([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 1. По умолчанию:0. - Возвращает: <integer>
Читает знаковое 8-битное целое число из buf по указанному offset.
Целые числа, считанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([-1, 5]);
console.log(buf.readInt8(0));
// Prints: -1
console.log(buf.readInt8(1));
// Prints: 5
console.log(buf.readInt8(2));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([-1, 5]);
console.log(buf.readInt8(0));
// Prints: -1
console.log(buf.readInt8(1));
// Prints: 5
console.log(buf.readInt8(2));
// Throws ERR_OUT_OF_RANGE.
buf.readInt16BE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
Читает знаковое 16-битное целое число в формате с прямым порядком байтов из buf по указанному offset.
Целые числа, считанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16BE(0));
// Prints: 5CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16BE(0));
// Prints: 5
buf.readInt16LE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
Читает знаковое 16-битное целое число в формате с обратным порядком байтов из buf по указанному offset.
Целые числа, считанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16LE(0));
// Prints: 1280
console.log(buf.readInt16LE(1));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 5]);
console.log(buf.readInt16LE(0));
// Prints: 1280
console.log(buf.readInt16LE(1));
// Throws ERR_OUT_OF_RANGE.
buf.readInt32BE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
Читает знаковое 32-битное целое число в формате с прямым порядком байтов из buf по указанному offset.
Целые числа, считанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32BE(0));
// Prints: 5CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32BE(0));
// Prints: 5
buf.readInt32LE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
Читает знаковое 32-битное целое число в формате с обратным порядком байтов из buf по указанному offset.
Целые числа, считанные из Buffer, интерпретируются как знаковые значения в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32LE(0));
// Prints: 83886080
console.log(buf.readInt32LE(1));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0, 0, 0, 5]);
console.log(buf.readInt32LE(0));
// Prints: 83886080
console.log(buf.readInt32LE(1));
// Throws ERR_OUT_OF_RANGE.
buf.readIntBE(offset, byteLength)
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - byteLength. -
byteLength<integer> Количество байтов для чтения. Должно удовлетворять0 < byteLength <= 6. - Возвращает: <integer>
Читает byteLength байт из buf по указанному offset и интерпретирует результат как знаковое значение в дополнительном коде с прямым порядком байтов, поддерживающее точность до 48 бит.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.
console.log(buf.readIntBE(1, 0).toString(16));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.
console.log(buf.readIntBE(1, 0).toString(16));
// Throws ERR_OUT_OF_RANGE.
buf.readIntLE(offset, byteLength)
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - byteLength. -
byteLength<integer> Количество байтов для чтения. Должно удовлетворять0 < byteLength <= 6. - Возвращает: <integer>
Читает byteLength байт из buf по указанному offset и интерпретирует результат как знаковое значение в дополнительном коде с обратным порядком байтов, поддерживающее точность до 48 бит.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntLE(0, 6).toString(16));
// Prints: -546f87a9cbeeCommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readIntLE(0, 6).toString(16));
// Prints: -546f87a9cbee
buf.readUInt8([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 1. По умолчанию:0. - Возвращает: <integer>
Читает беззнаковое 8-битное целое число из buf по указанному offset.
Эта функция также доступна под псевдонимом readUint8.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([1, -2]);
console.log(buf.readUInt8(0));
// Prints: 1
console.log(buf.readUInt8(1));
// Prints: 254
console.log(buf.readUInt8(2));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([1, -2]);
console.log(buf.readUInt8(0));
// Prints: 1
console.log(buf.readUInt8(1));
// Prints: 254
console.log(buf.readUInt8(2));
// Throws ERR_OUT_OF_RANGE.
buf.readUInt16BE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
Читает беззнаковое 16-битное целое число в формате с прямым порядком байтов из buf по указанному offset.
Эта функция также доступна под псевдонимом readUint16BE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16BE(0).toString(16));
// Prints: 1234
console.log(buf.readUInt16BE(1).toString(16));
// Prints: 3456CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16BE(0).toString(16));
// Prints: 1234
console.log(buf.readUInt16BE(1).toString(16));
// Prints: 3456
buf.readUInt16LE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
Читает беззнаковое 16-битное целое число в формате с обратным порядком байтов из buf по указанному offset.
Эта функция также доступна под псевдонимом readUint16LE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16LE(0).toString(16));
// Prints: 3412
console.log(buf.readUInt16LE(1).toString(16));
// Prints: 5634
console.log(buf.readUInt16LE(2).toString(16));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56]);
console.log(buf.readUInt16LE(0).toString(16));
// Prints: 3412
console.log(buf.readUInt16LE(1).toString(16));
// Prints: 5634
console.log(buf.readUInt16LE(2).toString(16));
// Throws ERR_OUT_OF_RANGE.
buf.readUInt32BE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
Читает беззнаковое 32-битное целое число в формате с прямым порядком байтов из buf по указанному offset.
Эта функция также доступна под псевдонимом readUint32BE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32BE(0).toString(16));
// Prints: 12345678CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32BE(0).toString(16));
// Prints: 12345678
buf.readUInt32LE([offset])
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
Читает беззнаковое 32-битное целое число в формате с обратным порядком байтов из buf по указанному offset.
Эта функция также доступна под псевдонимом readUint32LE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32LE(0).toString(16));
// Prints: 78563412
console.log(buf.readUInt32LE(1).toString(16));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
console.log(buf.readUInt32LE(0).toString(16));
// Prints: 78563412
console.log(buf.readUInt32LE(1).toString(16));
// Throws ERR_OUT_OF_RANGE.
buf.readUIntBE(offset, byteLength)
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - byteLength. -
byteLength<integer> Количество байтов для чтения. Должно удовлетворять0 < byteLength <= 6. - Возвращает: <integer>
Читает byteLength байт из buf по указанному offset и интерпретирует результат как беззнаковое целое число с прямым порядком байтов, поддерживающее точность до 48 бит.
Эта функция также доступна под псевдонимом readUintBE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readUIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readUIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.
buf.readUIntLE(offset, byteLength)
-
offset<integer> Количество байтов, которые нужно пропустить перед началом чтения. Должно удовлетворять0 <= offset <= buf.length - byteLength. -
byteLength<integer> Количество байтов для чтения. Должно удовлетворять0 < byteLength <= 6. - Возвращает: <integer>
Читает byteLength байт из buf по указанному offset и интерпретирует результат как беззнаковое целое число с обратным порядком байтов, поддерживающее точность до 48 бит.
Эта функция также доступна под псевдонимом readUintLE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntLE(0, 6).toString(16));
// Prints: ab9078563412CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
console.log(buf.readUIntLE(0, 6).toString(16));
// Prints: ab9078563412
buf.subarray([start[, end]])
-
start<integer> Позиция начала новогоBuffer. По умолчанию:0. -
end<integer> Позиция конца новогоBuffer(не включая ее). По умолчанию:buf.length. - Возвращает: <Buffer>
Возвращает новый Buffer, который ссылается на ту же область памяти, что и исходный, но со смещением и обрезанный по индексам start и end.
Если указать end больше, чем buf.length, результат будет таким же, как при значении end, равном buf.length.
Этот метод наследуется от TypedArray.prototype.subarray().
Изменение нового среза Buffer изменит содержимое памяти исходного Buffer, поскольку выделенная память этих двух объектов перекрывается.
Модули JavaScript
import { Buffer } from 'node:buffer';
// Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
// from the original `Buffer`.
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
const buf2 = buf1.subarray(0, 3);
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: abc
buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: !bcCommonJS
const { Buffer } = require('node:buffer');
// Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
// from the original `Buffer`.
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
const buf2 = buf1.subarray(0, 3);
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: abc
buf1[0] = 33;
console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: !bcПри указании отрицательных индексов срез создается относительно конца buf, а не его начала.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
console.log(buf.subarray(-6, -1).toString());
// Prints: buffe
// (Equivalent to buf.subarray(0, 5).)
console.log(buf.subarray(-6, -2).toString());
// Prints: buff
// (Equivalent to buf.subarray(0, 4).)
console.log(buf.subarray(-5, -2).toString());
// Prints: uff
// (Equivalent to buf.subarray(1, 4).)CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
console.log(buf.subarray(-6, -1).toString());
// Prints: buffe
// (Equivalent to buf.subarray(0, 5).)
console.log(buf.subarray(-6, -2).toString());
// Prints: buff
// (Equivalent to buf.subarray(0, 4).)
console.log(buf.subarray(-5, -2).toString());
// Prints: uff
// (Equivalent to buf.subarray(1, 4).)
buf.slice([start[, end]])
-
start<integer> Позиция начала новогоBuffer. По умолчанию:0. -
end<integer> Позиция конца новогоBuffer(не включая ее). По умолчанию:buf.length. - Возвращает: <Buffer>
buf.subarray.Возвращает новый Buffer, который ссылается на ту же область памяти, что и исходный, но со смещением и обрезанный по индексам start и end.
Этот метод несовместим с Uint8Array.prototype.slice(), суперклассом Buffer. Чтобы скопировать срез, используйте Uint8Array.prototype.slice().
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
const copiedBuf = Uint8Array.prototype.slice.call(buf);
copiedBuf[0]++;
console.log(copiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Prints: buffer
// With buf.slice(), the original buffer is modified.
const notReallyCopiedBuf = buf.slice();
notReallyCopiedBuf[0]++;
console.log(notReallyCopiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Also prints: cuffer (!)CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
const copiedBuf = Uint8Array.prototype.slice.call(buf);
copiedBuf[0]++;
console.log(copiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Prints: buffer
// With buf.slice(), the original buffer is modified.
const notReallyCopiedBuf = buf.slice();
notReallyCopiedBuf[0]++;
console.log(notReallyCopiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Also prints: cuffer (!)
buf.swap16()
- Возвращает: <Buffer> Ссылка на
buf.
Интерпретирует buf как массив беззнаковых 16-битных целых чисел и меняет порядок байтов на месте. Вызывает исключение ERR_INVALID_BUFFER_SIZE, если buf.length не кратно 2.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap16();
console.log(buf1);
// Prints: <Buffer 02 01 04 03 06 05 08 07>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap16();
// Throws ERR_INVALID_BUFFER_SIZE.CommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap16();
console.log(buf1);
// Prints: <Buffer 02 01 04 03 06 05 08 07>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap16();
// Throws ERR_INVALID_BUFFER_SIZE.Один из удобных способов использования buf.swap16() — быстрое преобразование на месте между UTF-16 с обратным порядком байтов и UTF-16 с прямым порядком байтов:
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
buf.swap16(); // Convert to big-endian UTF-16 text.CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
buf.swap16(); // Convert to big-endian UTF-16 text.
buf.swap32()
- Возвращает: <Buffer> Ссылка на
buf.
Интерпретирует buf как массив беззнаковых 32-битных целых чисел и меняет порядок байтов на месте. Вызывает исключение ERR_INVALID_BUFFER_SIZE, если buf.length не кратно 4.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap32();
console.log(buf1);
// Prints: <Buffer 04 03 02 01 08 07 06 05>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap32();
// Throws ERR_INVALID_BUFFER_SIZE.CommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap32();
console.log(buf1);
// Prints: <Buffer 04 03 02 01 08 07 06 05>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap32();
// Throws ERR_INVALID_BUFFER_SIZE.
buf.swap64()
- Возвращает: <Buffer> Ссылка на
buf.
Интерпретирует buf как массив 64-битных чисел и меняет порядок байтов на месте. Вызывает исключение ERR_INVALID_BUFFER_SIZE, если buf.length не кратно 8.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap64();
console.log(buf1);
// Prints: <Buffer 08 07 06 05 04 03 02 01>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap64();
// Throws ERR_INVALID_BUFFER_SIZE.CommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf1.swap64();
console.log(buf1);
// Prints: <Buffer 08 07 06 05 04 03 02 01>
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
buf2.swap64();
// Throws ERR_INVALID_BUFFER_SIZE.
buf.toJSON()
- Возвращает: <Object>
Возвращает представление buf в формате JSON. JSON.stringify() неявно вызывает эту функцию при преобразовании экземпляра Buffer в строку.
Buffer.from() принимает объекты в формате, возвращаемом этим методом. В частности, Buffer.from(buf.toJSON()) работает так же, как Buffer.from(buf).
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
console.log(json);
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ?
Buffer.from(value) :
value;
});
console.log(copy);
// Prints: <Buffer 01 02 03 04 05>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);
console.log(json);
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}
const copy = JSON.parse(json, (key, value) => {
return value && value.type === 'Buffer' ?
Buffer.from(value) :
value;
});
console.log(copy);
// Prints: <Buffer 01 02 03 04 05>
buf.toString([encoding[, start[, end]]])
-
encoding<string> Используемая кодировка символов. По умолчанию:'utf8'. -
start<integer> Смещение в байтах, с которого начинается декодирование. По умолчанию:0. -
end<integer> Смещение в байтах, на котором останавливается декодирование (не включая его). По умолчанию:buf.length. - Возвращает: <string>
Декодирует buf в строку, используя указанную кодировку символов из encoding. start и end можно передать, чтобы декодировать только часть buf.
Если encoding имеет значение 'utf8' и входная последовательность байтов не является допустимой UTF-8, каждый недопустимый байт заменяется символом замены U+FFFD.
Максимальная длина экземпляра строки (в 16-разрядных кодовых единицах UTF-16) доступна как buffer.constants.MAX_STRING_LENGTH.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde
const buf2 = Buffer.from('tést');
console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: téCommonJS
const { Buffer } = require('node:buffer');
const buf1 = Buffer.allocUnsafe(26);
for (let i = 0; i < 26; i++) {
// 97 is the decimal ASCII value for 'a'.
buf1[i] = i + 97;
}
console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde
const buf2 = Buffer.from('tést');
console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: té
buf.values()
- Возвращает: <Iterator>
Создаёт и возвращает итератор для значений buf (байтов). Эта функция вызывается автоматически, когда Buffer используется в инструкции for..of.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.from('buffer');
for (const value of buf.values()) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114
for (const value of buf) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.from('buffer');
for (const value of buf.values()) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114
for (const value of buf) {
console.log(value);
}
// Prints:
// 98
// 117
// 102
// 102
// 101
// 114
buf.write(string[, offset[, length]][, encoding])
-
string<string> Строка для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записиstring. По умолчанию:0. -
length<integer> Максимальное количество байтов для записи (количество записанных байтов не превыситbuf.length - offset). По умолчанию:buf.length - offset. -
encoding<string> Кодировка символовstring. По умолчанию:'utf8'. - Возвращает: <integer> Количество записанных байтов.
Записывает string в buf по адресу offset, используя кодировку символов из encoding. Параметр length задаёт количество байтов для записи. Если в buf недостаточно места для всей строки, будет записана только её часть (string). Однако символы, закодированные не полностью, записываться не будут.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.alloc(256);
const len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
// Prints: 12 bytes: ½ + ¼ = ¾
const buffer = Buffer.alloc(10);
const length = buffer.write('abcd', 8);
console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
// Prints: 2 bytes : abCommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.alloc(256);
const len = buf.write('\u00bd + \u00bc = \u00be', 0);
console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
// Prints: 12 bytes: ½ + ¼ = ¾
const buffer = Buffer.alloc(10);
const length = buffer.write('abcd', 8);
console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
// Prints: 2 bytes : ab
buf.writeBigInt64BE(value[, offset])
-
value<bigint> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от старшего байта к младшему.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64BE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04 05 06 07 08>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64BE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf.writeBigInt64LE(value[, offset])
-
value<bigint> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от младшего байта к старшему.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64LE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05 04 03 02 01>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigInt64LE(0x0102030405060708n, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05 04 03 02 01>
buf.writeBigUInt64BE(value[, offset])
-
value<bigint> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от старшего байта к младшему.
Эта функция также доступна под псевдонимом writeBigUint64BE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64BE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de ca fa fe ca ce fa de>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64BE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de ca fa fe ca ce fa de>
buf.writeBigUInt64LE(value[, offset])
-
value<bigint> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию:0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от младшего байта к старшему
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de fa ce ca fe fa ca de>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
console.log(buf);
// Prints: <Buffer de fa ce ca fe fa ca de>Эта функция также доступна под псевдонимом writeBigUint64LE.
buf.writeDoubleBE(value[, offset])
-
value<number> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от старшего байта к младшему. value должно быть числом JavaScript. Поведение не определено, если value имеет тип, отличный от числа JavaScript.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleBE(123.456, 0);
console.log(buf);
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleBE(123.456, 0);
console.log(buf);
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>
buf.writeDoubleLE(value[, offset])
-
value<number> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 8. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от младшего байта к старшему. value должно быть числом JavaScript. Поведение не определено, если value имеет тип, отличный от числа JavaScript.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleLE(123.456, 0);
console.log(buf);
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(8);
buf.writeDoubleLE(123.456, 0);
console.log(buf);
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>
buf.writeFloatBE(value[, offset])
-
value<number> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от старшего байта к младшему. Поведение не определено, если value имеет тип, отличный от числа JavaScript.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeFloatBE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer 4f 4a fe bb>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeFloatBE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer 4f 4a fe bb>
buf.writeFloatLE(value[, offset])
-
value<number> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от младшего байта к старшему. Поведение не определено, если value имеет тип, отличный от числа JavaScript.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeFloatLE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer bb fe 4a 4f>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeFloatLE(0xcafebabe, 0);
console.log(buf);
// Prints: <Buffer bb fe 4a 4f>
buf.writeInt8(value[, offset])
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 1. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset. value должно быть допустимым знаковым 8-разрядным целым числом. Поведение не определено, если value не является знаковым 8-разрядным целым числом.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(2);
buf.writeInt8(2, 0);
buf.writeInt8(-2, 1);
console.log(buf);
// Prints: <Buffer 02 fe>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(2);
buf.writeInt8(2, 0);
buf.writeInt8(-2, 1);
console.log(buf);
// Prints: <Buffer 02 fe>
buf.writeInt16BE(value[, offset])
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от старшего байта к младшему. value должно быть допустимым знаковым 16-разрядным целым числом. Поведение не определено, если value не является знаковым 16-разрядным целым числом.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(2);
buf.writeInt16BE(0x0102, 0);
console.log(buf);
// Prints: <Buffer 01 02>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(2);
buf.writeInt16BE(0x0102, 0);
console.log(buf);
// Prints: <Buffer 01 02>
buf.writeInt16LE(value[, offset])
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от младшего байта к старшему. value должно быть допустимым знаковым 16-разрядным целым числом. Поведение не определено, если value не является знаковым 16-разрядным целым числом.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(2);
buf.writeInt16LE(0x0304, 0);
console.log(buf);
// Prints: <Buffer 04 03>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(2);
buf.writeInt16LE(0x0304, 0);
console.log(buf);
// Prints: <Buffer 04 03>
buf.writeInt32BE(value[, offset])
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от старшего байта к младшему. value должно быть допустимым знаковым 32-разрядным целым числом. Поведение не определено, если value не является знаковым 32-разрядным целым числом.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeInt32BE(0x01020304, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeInt32BE(0x01020304, 0);
console.log(buf);
// Prints: <Buffer 01 02 03 04>
buf.writeInt32LE(value[, offset])
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает value в buf по указанному адресу offset в порядке от младшего байта к старшему. value должно быть допустимым знаковым 32-разрядным целым числом. Поведение не определено, если value не является знаковым 32-разрядным целым числом.
value интерпретируется и записывается как знаковое целое число в дополнительном коде.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeInt32LE(0x05060708, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeInt32LE(0x05060708, 0);
console.log(buf);
// Prints: <Buffer 08 07 06 05>
buf.writeIntBE(value, offset, byteLength)
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - byteLength. -
byteLength<integer> Количество байтов для записи. Должно удовлетворять условию0 < byteLength <= 6. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает byteLength байт значения value в buf по указанному адресу offset в порядке от старшего байта к младшему. Поддерживается точность до 48 бит. Поведение не определено, если value не является знаковым целым числом.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>
buf.writeIntLE(value, offset, byteLength)
-
value<integer> Число для записи вbuf. -
offset<integer> Количество байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - byteLength. -
byteLength<integer> Количество байтов для записи. Должно удовлетворять условию0 < byteLength <= 6. - Возвращает: <integer>
offsetплюс количество записанных байтов.
Записывает byteLength байт значения value в buf по указанному адресу offset в порядке от младшего байта к старшему. Поддерживается точность до 48 бит. Поведение не определено, если value не является знаковым целым числом.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>
buf.writeUInt8(value[, offset])
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 1. По умолчанию:0. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает value в buf по указанному offset. value должно быть допустимым беззнаковым 8-битным целым числом. Поведение не определено, если value не является беззнаковым 8-битным целым числом.
Эта функция также доступна под псевдонимом writeUint8.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);
console.log(buf);
// Prints: <Buffer 03 04 23 42>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);
console.log(buf);
// Prints: <Buffer 03 04 23 42>
buf.writeUInt16BE(value[, offset])
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает value в buf по указанному offset в порядке от старшего байта к младшему. value должно быть допустимым беззнаковым 16-битным целым числом. Поведение не определено, если value не является беззнаковым 16-битным целым числом.
Эта функция также доступна под псевдонимом writeUint16BE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer de ad be ef>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer de ad be ef>
buf.writeUInt16LE(value[, offset])
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 2. По умолчанию:0. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает value в buf по указанному offset в порядке от младшего байта к старшему. value должно быть допустимым беззнаковым 16-битным целым числом. Поведение не определено, если value не является беззнаковым 16-битным целым числом.
Эта функция также доступна под псевдонимом writeUint16LE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer ad de ef be>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);
console.log(buf);
// Prints: <Buffer ad de ef be>
buf.writeUInt32BE(value[, offset])
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает value в buf по указанному offset в порядке от старшего байта к младшему. value должно быть допустимым беззнаковым 32-битным целым числом. Поведение не определено, если value не является беззнаковым 32-битным целым числом.
Эта функция также доступна под псевдонимом writeUint32BE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32BE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer fe ed fa ce>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32BE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer fe ed fa ce>
buf.writeUInt32LE(value[, offset])
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - 4. По умолчанию:0. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает value в buf по указанному offset в порядке от младшего байта к старшему. value должно быть допустимым беззнаковым 32-битным целым числом. Поведение не определено, если value не является беззнаковым 32-битным целым числом.
Эта функция также доступна под псевдонимом writeUint32LE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32LE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer ce fa ed fe>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(4);
buf.writeUInt32LE(0xfeedface, 0);
console.log(buf);
// Prints: <Buffer ce fa ed fe>
buf.writeUIntBE(value, offset, byteLength)
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - byteLength. -
byteLength<integer> Число байтов для записи. Должно удовлетворять условию0 < byteLength <= 6. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает byteLength байт значения value в buf по указанному offset в порядке от старшего байта к младшему. Поддерживает точность до 48 бит. Поведение не определено, если value не является беззнаковым целым числом.
Эта функция также доступна под псевдонимом writeUintBE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeUIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeUIntBE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>
buf.writeUIntLE(value, offset, byteLength)
-
value<integer> Число, которое будет записано вbuf. -
offset<integer> Число байтов, которые нужно пропустить перед началом записи. Должно удовлетворять условию0 <= offset <= buf.length - byteLength. -
byteLength<integer> Число байтов для записи. Должно удовлетворять условию0 < byteLength <= 6. - Возвращает: <integer>
offsetплюс число записанных байтов.
Записывает byteLength байт значения value в buf по указанному offset в порядке от младшего байта к старшему. Поддерживает точность до 48 бит. Поведение не определено, если value не является беззнаковым целым числом.
Эта функция также доступна под псевдонимом writeUintLE.
Модули JavaScript
import { Buffer } from 'node:buffer';
const buf = Buffer.allocUnsafe(6);
buf.writeUIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>CommonJS
const { Buffer } = require('node:buffer');
const buf = Buffer.allocUnsafe(6);
buf.writeUIntLE(0x1234567890ab, 0, 6);
console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>
new Buffer(array)
Buffer.from(array).-
array<integer[]> Массив байтов для копирования.
См. Buffer.from(array).
new Buffer(arrayBuffer[, byteOffset[, length]])
Buffer.from(arrayBuffer[, byteOffset[, length]]).-
arrayBuffer<ArrayBuffer> | <SharedArrayBuffer> ОбъектArrayBuffer,SharedArrayBufferили свойство.bufferобъектаTypedArray. -
byteOffset<integer> Индекс первого байта, к которому предоставляется доступ. По умолчанию:0. -
length<integer> Число байтов, к которым предоставляется доступ. По умолчанию:arrayBuffer.byteLength - byteOffset.
См. Buffer.from(arrayBuffer[, byteOffset[, length]]).
new Buffer(buffer)
Buffer.from(buffer).-
buffer<Buffer> | <Uint8Array> Существующий объектBufferилиUint8Array, из которого копируются данные.
См. Buffer.from(buffer).
new Buffer(size)
Buffer.alloc() (также см. Buffer.allocUnsafe()).-
size<integer> Требуемая длина новогоBuffer.
См. Buffer.alloc() и Buffer.allocUnsafe(). Этот вариант конструктора эквивалентен Buffer.alloc().
new Buffer(string[, encoding])
Buffer.from(string[, encoding]).Класс: File
- Расширяет: <Blob>
Объект File предоставляет информацию о файлах.
new buffer.File(sources, fileName[, options])
-
sources<string[]> | <ArrayBuffer[]> | <TypedArray[]> | <DataView[]> | <Blob[]> | <File[]> Массив строк, объектов <ArrayBuffer>, <TypedArray>, <DataView>, <File> или <Blob>, либо любых сочетаний таких объектов, которые будут сохранены вFile. -
fileName<string> Имя файла. -
options<Object>-
endings<string> Одно из значений:'transparent'или'native'. Если задано значение'native', окончания строк в строковых исходных данных будут преобразованы в собственный формат окончаний строк платформы, указанный вrequire('node:os').EOL. -
type<string> Тип содержимого файла. -
lastModified<number> Дата последнего изменения файла. По умолчанию:Date.now().
-
file.name
- Тип: <string>
Имя File.
file.lastModified
- Тип: <number>
Дата последнего изменения File.
node:buffer API модуля
Хотя объект Buffer доступен глобально, существуют дополнительные API, связанные с Buffer, которые доступны только через модуль node:buffer, подключаемый с помощью require('node:buffer').
buffer.atob(data)
Buffer.from(data, 'base64').-
data<any> Входная строка в кодировке Base64.
Декодирует строку с данными в кодировке Base64 в байты, а затем кодирует эти байты в строку с использованием Latin-1 (ISO-8859-1).
Значением data может быть любое значение JavaScript, которое можно привести к строке.
Эта функция предоставлена только для совместимости с устаревшими API веб-платформы и не должна использоваться в новом коде, поскольку в них для представления двоичных данных используются строки, а сами API появились до внедрения типизированных массивов в JavaScript. Для кода, работающего с API Node.js, преобразование между строками в кодировке Base64 и двоичными данными следует выполнять с помощью Buffer.from(str, 'base64') и buf.toString('base64').
buffer.btoa(data)
buf.toString('base64').-
data<any> Строка в кодировке ASCII (Latin1).
Декодирует строку в байты с использованием Latin-1 (ISO-8859), а затем кодирует эти байты в строку с использованием Base64.
Значением data может быть любое значение JavaScript, которое можно привести к строке.
Эта функция предоставлена только для совместимости с устаревшими API веб-платформы и не должна использоваться в новом коде, поскольку в них для представления двоичных данных используются строки, а сами API появились до внедрения типизированных массивов в JavaScript. Для кода, работающего с API Node.js, преобразование между строками в кодировке Base64 и двоичными данными следует выполнять с помощью Buffer.from(str, 'base64') и buf.toString('base64').
buffer.isAscii(input)
- input <Buffer> | <ArrayBuffer> | <TypedArray> Входные данные для проверки.
- Возвращает: <boolean>
Эта функция возвращает true, если input содержит только допустимые данные в кодировке ASCII, включая случай, когда input пуст.
Вызывает исключение, если input является отсоединённым буфером массива.
buffer.isUtf8(input)
- input <Buffer> | <ArrayBuffer> | <TypedArray> Входные данные для проверки.
- Возвращает: <boolean>
Эта функция возвращает true, если input содержит только допустимые данные в кодировке UTF-8, включая случай, когда input пуст.
Вызывает исключение, если input является отсоединённым буфером массива.
buffer.INSPECT_MAX_BYTES
-
<integer> По умолчанию:
50
Возвращает максимальное количество байтов, возвращаемых при вызове buf.inspect(). Это значение можно переопределить в пользовательских модулях. Дополнительные сведения о поведении buf.inspect() см. в разделе util.inspect().
buffer.kMaxLength
-
<integer> Максимальный размер одного экземпляра
Buffer.
Синоним buffer.constants.MAX_LENGTH.
buffer.kStringMaxLength
-
<integer> Максимальная длина одного экземпляра
string.
Синоним buffer.constants.MAX_STRING_LENGTH.
buffer.resolveObjectURL(id)
-
id<string> Строка URL-адреса'blob:nodedata:..., возвращённая предыдущим вызовомURL.createObjectURL(). - Возвращает: <Blob>
Разрешает 'blob:nodedata:...' в связанный объект <Blob>, зарегистрированный предыдущим вызовом URL.createObjectURL().
buffer.transcode(source, fromEnc, toEnc)
-
source<Buffer> | <Uint8Array> ЭкземплярBufferилиUint8Array. -
fromEnc<string> Текущая кодировка. -
toEnc<string> Целевая кодировка. - Возвращает: <Buffer>
Повторно кодирует указанный экземпляр Buffer или Uint8Array из одной кодировки символов в другую. Возвращает новый экземпляр Buffer.
Вызывает исключение, если fromEnc или toEnc задают недопустимые кодировки символов либо если преобразование из fromEnc в toEnc не разрешено.
Поддерживаемые buffer.transcode() кодировки: 'ascii', 'utf8', 'utf16le', 'ucs2', 'latin1' и 'binary'.
В процессе перекодирования используются символы-замены, если заданную последовательность байтов невозможно корректно представить в целевой кодировке. Например:
Модули JavaScript
import { Buffer, transcode } from 'node:buffer';
const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
console.log(newBuf.toString('ascii'));
// Prints: '?'CommonJS
const { Buffer, transcode } = require('node:buffer');
const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
console.log(newBuf.toString('ascii'));
// Prints: '?'Поскольку знак евро (€) нельзя представить в US-ASCII, в перекодированном Buffer он заменяется на ?.
Класс: SlowBuffer
Buffer.allocUnsafeSlow().См. Buffer.allocUnsafeSlow(). Это никогда не было классом в том смысле, что конструктор всегда возвращал экземпляр Buffer, а не экземпляр SlowBuffer.
new SlowBuffer(size)
Buffer.allocUnsafeSlow().-
size<integer> Требуемая длина новогоSlowBuffer.
Константы Buffer
buffer.constants.MAX_LENGTH
-
<integer> Максимальный размер одного экземпляра
Buffer.
В 32-разрядных архитектурах это значение в настоящее время равно 230 - 1 (около 1 ГиБ).
В 64-разрядных архитектурах это значение в настоящее время равно 232 (около 4 ГиБ).
Оно соответствует v8::TypedArray::kMaxLength во внутренней реализации.
Это значение также доступно как buffer.kMaxLength.
buffer.constants.MAX_STRING_LENGTH
-
<integer> Максимальная длина одного экземпляра
string.
Представляет максимальную длину length, которую может иметь примитив string; длина измеряется в 16-разрядных кодовых единицах UTF-16.
Это значение может зависеть от используемого движка JS.
Buffer.from(), Buffer.alloc() и Buffer.allocUnsafe()
В версиях Node.js до 6.0.0 экземпляры Buffer создавались с помощью функции-конструктора Buffer, которая выделяет возвращаемый Buffer по-разному в зависимости от переданных аргументов:
- Передача числа в качестве первого аргумента
Buffer()(например,new Buffer(10)) выделяет новый объектBufferуказанного размера. До Node.js 8.0.0 память, выделенная для таких экземпляровBuffer, не инициализировалась и могла содержать конфиденциальные данные. Такие экземплярыBufferнеобходимо впоследствии инициализировать с помощьюbuf.fill(0)либо записать данные во весьBufferперед чтением данных изBuffer. Хотя такое поведение было преднамеренным для повышения производительности, опыт разработки показал, что требуется более явное различие между созданием быстрого, но неинициализированногоBufferи более медленного, но безопасногоBuffer. Начиная с Node.js 8.0.0,Buffer(num)иnew Buffer(num)возвращаютBufferс инициализированной памятью. - Передача строки, массива или
Bufferв качестве первого аргумента копирует данные переданного объекта вBuffer. - Передача
ArrayBufferилиSharedArrayBufferвозвращаетBuffer, использующий общую выделенную память с указанным буфером массива.
Поскольку поведение new Buffer() зависит от типа первого аргумента, в приложениях могут случайно возникнуть проблемы с безопасностью и надёжностью, если не выполнять проверку аргументов или инициализацию Buffer.
Например, если злоумышленник может заставить приложение получить число вместо ожидаемой строки, приложение может вызвать new Buffer(100) вместо new Buffer("100") и выделить буфер размером 100 байт вместо буфера размером 3 байта с содержимым "100". Такое часто возможно при использовании вызовов API JSON. Поскольку JSON различает числовые значения и строки, он позволяет внедрять числа в случаях, когда наивно написанное приложение, недостаточно проверяющее входные данные, может ожидать только строку. До Node.js 8.0.0 буфер размером 100 байт мог содержать произвольные данные, уже находившиеся в памяти, что позволяло раскрыть хранящиеся в памяти секреты удалённому злоумышленнику. Начиная с Node.js 8.0.0 раскрытие памяти невозможно, поскольку данные заполняются нулями. Тем не менее возможны другие атаки, например выделение сервером очень больших буферов, что может привести к снижению производительности или сбою из-за исчерпания памяти.
Чтобы сделать создание экземпляров Buffer более надёжным и менее подверженным ошибкам, различные варианты конструктора new Buffer() были помечены как устаревшие и заменены отдельными методами Buffer.from(), Buffer.alloc() и Buffer.allocUnsafe().
Разработчикам следует перенести все существующие вызовы конструкторов new Buffer() на один из этих новых API.
-
Buffer.from(array)возвращает новыйBuffer, который содержит копию предоставленных октетов. -
Buffer.from(arrayBuffer[, byteOffset[, length]])возвращает новыйBuffer, который использует ту же выделенную память, что и указанныйArrayBuffer. -
Buffer.from(buffer)возвращает новыйBuffer, который содержит копию содержимого указанногоBuffer. -
Buffer.from(string[, encoding])возвращает новыйBuffer, который содержит копию указанной строки. -
Buffer.alloc(size[, fill[, encoding]])возвращает новый инициализированныйBufferуказанного размера. Этот метод работает медленнее, чемBuffer.allocUnsafe(size), но гарантирует, что вновь созданные экземплярыBufferникогда не будут содержать старые потенциально конфиденциальные данные. Еслиsizeне является числом, будет вызвано исключениеTypeError. -
Buffer.allocUnsafe(size)иBuffer.allocUnsafeSlow(size)возвращают новый неинициализированныйBufferуказанногоsize. ПосколькуBufferне инициализирован, выделенный участок памяти может содержать старые потенциально конфиденциальные данные.
Экземпляры Buffer, возвращаемые методами Buffer.allocUnsafe(), Buffer.from(string), Buffer.concat() и Buffer.from(array), могут размещаться в общем внутреннем пуле памяти, если size меньше или равно половине значения Buffer.poolSize. Экземпляры, возвращаемые методом Buffer.allocUnsafeSlow(), никогда не используют общий внутренний пул памяти.
Параметр командной строки --zero-fill-buffers
Node.js можно запустить с параметром командной строки --zero-fill-buffers, чтобы по умолчанию при создании все вновь выделенные экземпляры Buffer заполнялись нулями. Без этого параметра буферы, созданные с помощью Buffer.allocUnsafe(), Buffer.allocUnsafeSlow() и new SlowBuffer(size), нулями не заполняются. Использование этого флага может заметно снизить производительность. Используйте параметр --zero-fill-buffers только при необходимости гарантировать, что вновь выделенные экземпляры Buffer не будут содержать старые потенциально конфиденциальные данные.
$ node --zero-fill-buffers > Buffer.allocUnsafe(5); <Buffer 00 00 00 00 00> copy
Почему Buffer.allocUnsafe() и Buffer.allocUnsafeSlow() считаются «небезопасными»?
При вызове Buffer.allocUnsafe() и Buffer.allocUnsafeSlow() выделенный участок памяти не инициализируется (то есть не заполняется нулями). Хотя благодаря такому подходу память выделяется очень быстро, выделенный участок может содержать старые потенциально конфиденциальные данные. Использование Buffer, созданного методом Buffer.allocUnsafe(), без полной перезаписи памяти может привести к утечке этих старых данных при чтении памяти Buffer.
Хотя использование Buffer.allocUnsafe() даёт очевидные преимущества в производительности, необходимо проявлять особую осторожность, чтобы не допустить появления уязвимостей в приложении.
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v20.x/docs/api/buffer.html