Буфер¶
Стабильность: 2 – Стабильная
Совместимость с экосистемой npm имеет высокий приоритет.
Объекты Buffer используются для представления последовательности байтов фиксированной длины. Многие API Node.js поддерживают Buffer.
Класс Buffer — подкласс встроенного в JavaScript типа Uint8Array и расширяет его методами для дополнительных сценариев. API Node.js принимают обычные Uint8Array везде, где поддерживаются и Buffer.
Хотя класс Buffer доступен в глобальной области видимости, рекомендуется явно ссылаться на него через import или require.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
Буферы и кодировки символов¶
При преобразовании между Buffer и строками может быть указана кодировка символов. Если кодировка не указана, по умолчанию используется UTF-8.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Буферы 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', каждый символ строки кодируется 2 или 4 байтами. Node.js поддерживает только младший порядок байтов(endianness) для 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, Section 5. При созданииBufferиз строки эта кодировка также принимает обычные строки в base64. При кодированииBufferв строку заполнение (padding) опускается. -
'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 такие символы всегда поддерживаются.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Современные веб-браузеры следуют WHATWG Encoding Standard, где 'latin1' и 'ISO-8859-1' сопоставляются с 'win-1252'. Поэтому при вызове, например, http.get(), если в ответе указана одна из кодировок из спецификации WHATWG, сервер мог вернуть данные в 'win-1252', и декодирование с 'latin1' может дать неверные символы.
Буферы и TypedArray¶
Экземпляры Buffer одновременно являются экземплярами JavaScript Uint8Array и TypedArray. Все методы и свойства TypedArray доступны у Buffer. При этом между API Buffer и 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, интерпретируемое как массив целых чисел, а не как последовательность байтов целевого типа.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
- Передача лежащего в основе
BufferArrayBuffer создаст TypedArray, разделяющий сBufferпамять.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Новый Buffer, разделяющий ту же выделенную память, что и экземпляр TypedArray, можно создать через свойство .buffer объекта TypedArray так же, как описано выше. Buffer.from() в этом случае ведёт себя как new Uint8Array().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
При создании Buffer из .buffer у TypedArray можно использовать только часть лежащего в основе ArrayBuffer, передав параметры byteOffset и length.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
Buffer.from() и TypedArray.from() имеют разные сигнатуры и реализацию. В частности, варианты TypedArray принимают второй аргумент — функцию отображения, вызываемую для каждого элемента:
Метод Buffer.from() функцию отображения не поддерживает:
Buffer.from(array)Buffer.from(buffer)Buffer.from(arrayBuffer[, byteOffset[, length]])Buffer.from(string[, encoding])
Методы Buffer можно вызывать для экземпляров Uint8Array¶
Все методы прототипа Buffer можно вызывать с экземпляром Uint8Array.
1 2 3 4 5 6 7 8 | |
Буферы и итерация¶
Экземпляры Buffer можно перебирать синтаксисом for..of:
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Дополнительно итераторы можно получить методами 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>
Создаёт новый объект Blob, объединяющий указанные источники.
Источники ArrayBuffer, TypedArray, DataView и Buffer копируются в Blob, поэтому после создания Blob их можно безопасно изменять.
Строковые источники кодируются в UTF-8 и копируются в блоб. Непарные суррогатные пары в каждой строковой части заменяются символом замены Unicode U+FFFD.
blob.arrayBuffer()¶
- Возвращает:
<Promise>
Возвращает промис, который выполняется с ArrayBuffer, содержащим копию данных Blob.
blob.bytes()¶
Метод blob.bytes() возвращает байты объекта Blob в виде Promise<Uint8Array>.
1 2 3 4 | |
blob.size¶
Общий размер Blob в байтах.
blob.slice([start[, end[, type]]])¶
start<number>Начальный индекс.end<number>Конечный индекс.type<string>MIME-тип для новогоBlob
Создаёт и возвращает новый Blob с подмножеством данных этого Blob. Исходный Blob не изменяется.
blob.stream()¶
- Возвращает: ReadableStream(webstreams.md#readablestream)
Возвращает новый ReadableStream для чтения содержимого Blob.
blob.text()¶
- Возвращает:
<Promise>
Возвращает промис, который выполняется со строкой — содержимым Blob, декодированным как UTF-8.
blob.type¶
- Тип:
<string>
MIME-тип содержимого Blob.
Объекты Blob и MessageChannel¶
После создания Blob его можно передать через MessagePort в несколько мест без переноса или немедленного копирования данных. Данные внутри Blob копируются только при вызове arrayBuffer() или text().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Класс: 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, буфер заполняется нулями.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
Если size больше buffer.constants.MAX_LENGTH или меньше 0, выбрасывается ERR_OUT_OF_RANGE.
Если указан fill, выделенный Buffer инициализируется вызовом buf.fill(fill).
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
Если указаны и fill, и encoding, выделенный Buffer инициализируется вызовом buf.fill(fill, encoding).
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
Вызов 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(), чтобы получить буфер, заполненный нулями.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Если size не является числом, выбрасывается TypeError.
Модуль 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) использует его, если 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.allocUnsafe() для выделения новых Buffer фрагменты меньше Buffer.poolSize >>> 1 (при значении пула по умолчанию — до 4 КиБ) вырезаются из одного заранее выделенного Buffer. Это снижает накладные расходы сборщика мусора при множестве отдельных выделений и улучшает производительность и расход памяти, уменьшая число отслеживаемых объектов ArrayBuffer.
Если же нужно удерживать небольшой фрагмент памяти из пула неопределённо долго, разумнее создать внепуловый Buffer через Buffer.allocUnsafeSlow() и скопировать нужные данные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Если 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' функция предполагает корректные входные данные. Если в строке есть посторонние символы (например пробелы), возвращаемое значение может быть больше длины Buffer, созданного из этой строки.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
Если 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).
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
Статический метод: 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. Если суммарная длина меньше totalLength, оставшееся место заполняется нулями.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Buffer.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.
1 2 3 4 5 6 | |
Статический метод: Buffer.from(array)¶
array<integer[]>- Возвращает:
<Buffer>
Выделяет новый Buffer, используя array байтов в диапазоне 0 – 255. Элементы массива вне этого диапазона усекаются, чтобы поместиться в него.
1 2 3 4 | |
1 2 3 4 | |
Если array — объект, похожий на Array (то есть с свойством length типа number), он обрабатывается как массив, если только это не Buffer или Uint8Array. Иначе говоря, все остальные варианты TypedArray обрабатываются как Array. Чтобы создать Buffer из байтов, лежащих в основе TypedArray, используйте Buffer.copyBytesFrom().
Будет выброшен TypeError, если array не является Array или другим типом, подходящим для вариантов Buffer.from().
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Необязательные аргументы byteOffset и length задают диапазон памяти внутри arrayBuffer, который будет совместно использоваться с Buffer.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
Будет выброшен TypeError, если arrayBuffer не является ArrayBuffer или SharedArrayBuffer или другим типом, подходящим для вариантов Buffer.from().
Важно помнить, что базовый ArrayBuffer может охватывать область памяти шире, чем представление TypedArray. Новый Buffer, созданный через свойство buffer у TypedArray, может выходить за границы самого TypedArray:
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
Статический метод: Buffer.from(buffer)¶
buffer<Buffer>|<Uint8Array>СуществующийBufferили Uint8Array, из которого копируются данные.- Возвращает:
<Buffer>
Копирует данные переданного buffer в новый экземпляр Buffer.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Будет выброшен TypeError, если buffer не является Buffer или другим типом, подходящим для вариантов Buffer.from().
Статический метод: Buffer.from(object[, offsetOrEncoding[, length]])¶
object<Object>Объект с поддержкойSymbol.toPrimitiveилиvalueOf().offsetOrEncoding<integer>|<string>Смещение в байтах или кодировка.length<integer>Длина.- Возвращает:
<Buffer>
Для объектов, у которых valueOf() возвращает значение, не строго равное object, возвращается Buffer.from(object.valueOf(), offsetOrEncoding, length).
1 2 3 4 | |
1 2 3 4 | |
Для объектов с поддержкой Symbol.toPrimitive возвращается Buffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding).
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
Будет выброшен TypeError, если у object нет указанных методов или тип не подходит для вариантов Buffer.from().
Статический метод: Buffer.from(string[, encoding])¶
string<string>Строка для кодирования.encoding<string>Кодировкаstring. По умолчанию:'utf8'.- Возвращает:
<Buffer>
Создаёт новый Buffer, содержащий string. Параметр encoding задаёт кодировку символов при преобразовании string в байты.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Будет выброшен TypeError, если string не является строкой или другим типом, подходящим для вариантов Buffer.from().
Buffer.from(string) также может использовать внутренний пул Buffer, как это делает Buffer.allocUnsafe().
Статический метод: Buffer.isBuffer(obj)¶
Возвращает true, если obj — это Buffer, иначе false.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
Статический метод: Buffer.isEncoding(encoding)¶
Возвращает true, если encoding — имя поддерживаемой кодировки символов, иначе false.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
buf.buffer¶
- Тип:
<ArrayBuffer>Базовый объектArrayBuffer, на основе которого создан этотBuffer.
Не гарантируется, что этот ArrayBuffer в точности соответствует исходному Buffer. Подробности см. в примечаниях к buf.byteOffset.
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 | |
buf.byteOffset¶
- Тип:
<integer>byteOffsetбазового объектаArrayBufferуBuffer.
При задании byteOffset в Buffer.from(ArrayBuffer, byteOffset, length) или иногда при выделении Buffer меньше Buffer.poolSize буфер не начинается с нулевого смещения в базовом ArrayBuffer.
Это может вызывать проблемы при прямом доступе к базовому ArrayBuffer через buf.buffer, поскольку другие части ArrayBuffer могут не относиться к самому объекту Buffer.
Частая проблема при создании TypedArray, разделяющего память с Buffer, — нужно корректно указать byteOffset:
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Необязательные аргументы targetStart, targetEnd, sourceStart и sourceEnd позволяют ограничить сравнение заданными диапазонами в target и buf.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
Выбрасывается 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, хотя набор аргументов у функции другой.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
buf.entries()¶
- Возвращает:
<Iterator>
Создаёт и возвращает iterator пар [index, byte] по содержимому buf.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
buf.equals(otherBuffer)¶
otherBuffer<Buffer>|<Uint8Array>Bufferили Uint8Array для сравнения сbuf.- Возвращает:
<boolean>
Возвращает true, если у buf и otherBuffer совпадают все байты, иначе false. Эквивалентно выражению buf.compare(otherBuffer) === 0.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
value приводится к uint32, если это не строка, не Buffer и не целое число. Если получившееся целое больше 255 (десятичное), buf заполняется значением value & 255.
Если последняя запись операции fill() приходится на многобайтовый символ, в buf записываются только те байты символа, которые в него помещаются:
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
Если value содержит недопустимые символы, они отбрасываются; если не остаётся корректных данных для заполнения, выбрасывается исключение:
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
buf.includes(value[, start[, end]][, encoding])¶
value<string>|<Buffer>|<Uint8Array>|<integer>Что искать.start<integer>С какого места начинать поиск вbuf. Если отрицательно, смещение считается от концаbuf. По умолчанию:0.end<integer>Где закончить поиск вbuf(не включая). По умолчанию:buf.length.encoding<string>Еслиvalue— строка, это её кодировка. По умолчанию:'utf8'.- Возвращает:
<boolean>true, еслиvalueнайден вbuf, иначеfalse.
Эквивалентно выражению buf.indexOf() !== -1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
buf.indexOf(value[, start[, end]][, encoding])¶
value<string>|<Buffer>|<Uint8Array>|<integer>Что искать.start<integer>С какого места начинать поиск вbuf. Если отрицательно, смещение считается от концаbuf. По умолчанию:0.end<integer>Где закончить поиск вbuf(не включая). По умолчанию:buf.length.encoding<string>Еслиvalue— строка, задаёт кодировку для двоичного представления строки при поиске вbuf. По умолчанию:'utf8'.- Возвращает:
<integer>Индекс первого вхожденияvalueвbufили-1, еслиvalueвbufнет.
Если value — это:
- строка,
valueинтерпретируется в соответствии с кодировкой символов вencoding; Bufferили Uint8Array, используетсяvalueцеликом; для сравнения частиBufferиспользуйтеbuf.subarray;- число,
valueинтерпретируется как беззнаковое 8-битное целое в диапазоне от0до255.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Если value не является строкой, числом или Buffer, метод выбросит TypeError. Если value — число, оно приводится к допустимому байтовому значению (целое от 0 до 255).
Если byteOffset не число, оно приводится к числу. Если результат приведения NaN или 0, ищется весь буфер. Поведение совпадает с String.prototype.indexOf().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Если value — пустая строка или пустой Buffer, а byteOffset меньше buf.length, возвращается byteOffset. Если value пусто и byteOffset не меньше buf.length, возвращается buf.length.
buf.keys()¶
- Возвращает:
<Iterator>
Создаёт и возвращает iterator по ключам buf (индексам).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
buf.lastIndexOf(value[, start[, end]][, encoding])¶
value<string>|<Buffer>|<Uint8Array>|<integer>Что искать.start<integer>С какого места начинать поиск вbuf. Если отрицательно, смещение считается от концаbuf. По умолчанию:buf.length - 1.end<integer>Где закончить поиск вbuf(не включая). По умолчанию:buf.length.encoding<string>Еслиvalue— строка, задаёт кодировку для двоичного представления строки при поиске вbuf. По умолчанию:'utf8'.- Возвращает:
<integer>Индекс последнего вхожденияvalueвbufили-1, еслиvalueвbufнет.
То же, что buf.indexOf(), но ищется последнее вхождение value, а не первое.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
Если value не является строкой, числом или Buffer, метод выбросит TypeError. Если value — число, оно приводится к допустимому байтовому значению (целое от 0 до 255).
Если byteOffset не число, оно приводится к числу. Аргументы, дающие при приведении NaN (например {} или undefined), означают поиск по всему буферу. Поведение совпадает с String.prototype.lastIndexOf().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Если value — пустая строка или пустой Buffer, возвращается byteOffset.
buf.length¶
- Тип:
<integer>
Возвращает число байт в buf.
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
buf.parent¶
Стабильность: 0 - Устарело: используйте
buf.bufferвместо этого.
Свойство buf.parent — устаревший псевдоним для buf.buffer.
buf.readBigInt64BE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<bigint>
Читает знаковое 64-битное целое (big-endian) из buf по указанному смещению offset.
Целые числа, прочитанные из Buffer, интерпретируются как знаковые в дополнении до двух.
buf.readBigInt64LE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<bigint>
Читает знаковое 64-битное целое (little-endian) из buf по указанному смещению offset.
Целые числа, прочитанные из Buffer, интерпретируются как знаковые в дополнении до двух.
buf.readBigUInt64BE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<bigint>
Читает беззнаковое 64-битное целое (big-endian) из buf по указанному смещению offset.
Также доступна под псевдонимом readBigUint64BE.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readBigUInt64LE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<bigint>
Читает беззнаковое 64-битное целое (little-endian) из buf по указанному смещению offset.
Также доступна под псевдонимом readBigUint64LE.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readDoubleBE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<number>
Читает 64-битное число с плавающей запятой (big-endian) из buf по указанному смещению offset.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readDoubleLE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<number>
Читает 64-битное число с плавающей запятой (little-endian) из buf по указанному смещению offset.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readFloatBE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<number>
Читает 32-битное число с плавающей запятой (big-endian) из buf по указанному смещению offset.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readFloatLE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<number>
Читает 32-битное число с плавающей запятой (little-endian) из buf по указанному смещению offset.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readInt8([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 1. По умолчанию:0.- Возвращает:
<integer>
Читает знаковое 8-битное целое из buf по указанному смещению offset.
Целые числа, считываемые из Buffer, интерпретируются как знаковые значения в дополнительном коде.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
buf.readInt16BE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>
Читает знаковое 16-битное целое (big-endian) из buf по указанному смещению offset.
Целые числа, считываемые из Buffer, интерпретируются как знаковые значения в дополнительном коде.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readInt16LE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>
Читает знаковое 16-битное целое (little-endian) из buf по указанному смещению offset.
Целые числа, считываемые из Buffer, интерпретируются как знаковые значения в дополнительном коде.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readInt32BE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>
Читает знаковое 32-битное целое (big-endian) из buf по указанному смещению offset.
Целые числа, считываемые из Buffer, интерпретируются как знаковые значения в дополнительном коде.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readInt32LE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>
Читает знаковое 32-битное целое (little-endian) из buf по указанному смещению offset.
Целые числа, считываемые из Buffer, интерпретируются как знаковые значения в дополнительном коде.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readIntBE(offset, byteLength)¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - byteLength.byteLength<integer>Сколько байт прочитать. Должно выполняться0 < byteLength <= 6.- Возвращает:
<integer>
Читает из buf начиная с offset ровно byteLength байт и интерпретирует результат как знаковое целое в дополнении до двух (big-endian) с точностью до 48 бит.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
buf.readIntLE(offset, byteLength)¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - byteLength.byteLength<integer>Сколько байт прочитать. Должно выполняться0 < byteLength <= 6.- Возвращает:
<integer>
Читает из buf начиная с offset ровно byteLength байт и интерпретирует результат как знаковое целое в дополнении до двух (little-endian) с точностью до 48 бит.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readUInt8([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 1. По умолчанию:0.- Возвращает:
<integer>
Читает беззнаковое 8-битное целое из buf по указанному смещению offset.
Также доступна под псевдонимом readUint8.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
buf.readUInt16BE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>
Читает беззнаковое 16-битное целое (big-endian) из buf по указанному смещению offset.
Также доступна под псевдонимом readUint16BE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readUInt16LE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>
Читает беззнаковое 16-битное целое (little-endian) из buf по указанному смещению offset.
Также доступна под псевдонимом readUint16LE.
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 | |
buf.readUInt32BE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>
Читает беззнаковое 32-битное целое (big-endian) из buf по указанному смещению offset.
Также доступна под псевдонимом readUint32BE.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
buf.readUInt32LE([offset])¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>
Читает беззнаковое 32-битное целое (little-endian) из buf по указанному смещению offset.
Также доступна под псевдонимом readUint32LE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readUIntBE(offset, byteLength)¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - byteLength.byteLength<integer>Сколько байт прочитать. Должно выполняться0 < byteLength <= 6.- Возвращает:
<integer>
Читает из buf начиная с offset ровно byteLength байт и интерпретирует результат как беззнаковое целое (big-endian) с точностью до 48 бит.
Также доступна под псевдонимом readUintBE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.readUIntLE(offset, byteLength)¶
offset<integer>Сколько байт пропустить перед чтением. Должно выполняться0 <= offset <= buf.length - byteLength.byteLength<integer>Сколько байт прочитать. Должно выполняться0 < byteLength <= 6.- Возвращает:
<integer>
Читает из buf начиная с offset ровно byteLength байт и интерпретирует результат как беззнаковое целое (little-endian) с точностью до 48 бит.
Также доступна под псевдонимом readUintLE.
1 2 3 4 5 6 | |
1 2 3 4 5 6 | |
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, потому что выделенная память у обоих объектов перекрывается.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Отрицательные индексы задают срез относительно конца buf, а не начала.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
buf.slice([start[, end]])¶
Стабильность: 0 - Устарело: используйте
buf.subarrayвместо этого.
start<integer>С какого индекса начинается новыйBuffer. По умолчанию:0.end<integer>Где заканчивается новыйBuffer(не включая). По умолчанию:buf.length.- Возвращает:
<Buffer>
Возвращает новый Buffer, ссылающийся на ту же память, что и исходный, но со смещением и обрезкой по индексам start и end.
Метод не совместим с Uint8Array.prototype.slice(), от которого наследуется Buffer. Чтобы скопировать срез, используйте Uint8Array.prototype.slice().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
buf.swap16()¶
- Возвращает:
<Buffer>Ссылка наbuf.
Интерпретирует buf как массив беззнаковых 16-битных целых чисел и меняет порядок байтов на месте. Выбрасывает ERR_INVALID_BUFFER_SIZE, если buf.length не кратно 2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Одним из удобных применений buf.swap16() является быстрое преобразование на месте между UTF-16 little-endian и UTF-16 big-endian:
1 2 3 4 | |
1 2 3 4 | |
buf.swap32()¶
- Возвращает:
<Buffer>Ссылка наbuf.
Интерпретирует buf как массив беззнаковых 32-битных целых чисел и меняет порядок байтов на месте. Выбрасывает ERR_INVALID_BUFFER_SIZE, если buf.length не кратно 4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
buf.swap64()¶
- Возвращает:
<Buffer>Ссылка наbuf.
Интерпретирует buf как массив 64-битных чисел и меняет порядок байтов на месте. Выбрасывает ERR_INVALID_BUFFER_SIZE, если buf.length не кратен 8.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
buf.toJSON()¶
- Возвращает:
<Object>
Возвращает JSON-представление buf. JSON.stringify() неявно вызывает эту функцию при сериализации экземпляра Buffer.
Buffer.from() принимает объекты в формате, возвращаемом этим методом. В частности, Buffer.from(buf.toJSON()) ведёт себя как Buffer.from(buf).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
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.
Максимальная длина строки (в кодовых единицах UTF-16) задаётся константой buffer.constants.MAX_STRING_LENGTH.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
buf.values()¶
- Возвращает:
<Iterator>
Создаёт и возвращает iterator по значениям buf (байтам). Функция вызывается автоматически, когда Buffer используется в операторе for..of.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
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. Частично закодированные символы не записываются.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
buf.writeBigInt64BE(value[, offset])¶
value<bigint>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeBigInt64LE(value[, offset])¶
value<bigint>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeBigUInt64BE(value[, offset])¶
value<bigint>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian.
Также доступна под псевдонимом writeBigUint64BE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeBigUInt64LE(value[, offset])¶
value<bigint>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться:0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
Также доступна под псевдонимом writeBigUint64LE.
buf.writeDoubleBE(value[, offset])¶
value<number>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian. value должно быть числом JavaScript. Поведение не определено, если value не является числом JavaScript.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeDoubleLE(value[, offset])¶
value<number>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 8. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian. value должно быть числом JavaScript. Поведение не определено, если value не является числом JavaScript.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeFloatBE(value[, offset])¶
value<number>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian. Поведение не определено, если value не является числом JavaScript.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeFloatLE(value[, offset])¶
value<number>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian. Поведение не определено, если value не является числом JavaScript.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeInt8(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 1. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset. value должно быть корректным знаковым 8-битным целым. Поведение не определено, если value не является таким числом.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
buf.writeInt16BE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian. value должно быть корректным знаковым 16-битным целым. Поведение не определено, если value не является таким числом.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeInt16LE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian. value должно быть корректным знаковым 16-битным целым. Поведение не определено, если value не является таким числом.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeInt32BE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian. value должно быть корректным знаковым 32-битным целым. Поведение не определено, если value не является таким числом.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeInt32LE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian. value должно быть корректным знаковым 32-битным целым. Поведение не определено, если value не является таким числом.
value интерпретируется и записывается как знаковое целое в дополнении до двух.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
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 в порядке big-endian. Поддерживается точность до 48 бит. Поведение не определено, если value не является знаковым целым.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
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 в порядке little-endian. Поддерживается точность до 48 бит. Поведение не определено, если value не является знаковым целым.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeUInt8(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 1. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset. value должно быть корректным беззнаковым 8-битным целым. Поведение не определено, если value не является таким числом.
Также доступна под псевдонимом writeUint8.
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 | |
buf.writeUInt16BE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian. value должно быть корректным беззнаковым 16-битным целым. Поведение не определено, если value не является таким числом.
Также доступна под псевдонимом writeUint16BE.
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
buf.writeUInt16LE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 2. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian. value должно быть корректным беззнаковым 16-битным целым. Поведение не определено, если value не является таким числом.
Также доступна под псевдонимом writeUint16LE.
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 | |
buf.writeUInt32BE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке big-endian. value должно быть корректным беззнаковым 32-битным целым. Поведение не определено, если value не является таким числом.
Также доступна под псевдонимом writeUint32BE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
buf.writeUInt32LE(value[, offset])¶
value<integer>Число для записи вbuf.offset<integer>Сколько байт пропустить перед записью. Должно выполняться0 <= offset <= buf.length - 4. По умолчанию:0.- Возвращает:
<integer>offsetплюс число записанных байт.
Записывает value в buf по смещению offset в порядке little-endian. value должно быть корректным беззнаковым 32-битным целым. Поведение не определено, если value не является таким числом.
Также доступна под псевдонимом writeUint32LE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
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 в порядке big-endian. Поддерживается точность до 48 бит. Поведение не определено, если value не является беззнаковым целым.
Также доступна под псевдонимом writeUintBE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
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 в порядке little-endian. Поддерживается точность до 48 бит. Поведение не определено, если value не является беззнаковым целым.
Также доступна под псевдонимом writeUintLE.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 | |
new Buffer(array)¶
Stability: 0 - Устарело: Используйте
Buffer.from(array)вместо этого.
array<integer[]>Массив байтов для копирования.
См. Buffer.from(array).
new Buffer(arrayBuffer[, byteOffset[, length]])¶
Стабильность: 0 - Устарело: используйте
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)¶
Стабильность: 0 - Устарело: используйте
Buffer.from(buffer)вместо этого.
buffer<Buffer>|<Uint8Array>СуществующийBufferили Uint8Array, из которого копируются данные.
См. Buffer.from(buffer).
new Buffer(size)¶
Стабильность: 0 - Устарело: используйте
Buffer.alloc()вместо этого (см. такжеBuffer.allocUnsafe()).
size<integer>Желаемая длина новогоBuffer.
См. Buffer.alloc() и Buffer.allocUnsafe(). Этот вариант конструктора эквивалентен Buffer.alloc().
new Buffer(string[, encoding])¶
Стабильность: 0 - Устарело: используйте
Buffer.from(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>
file.name¶
- Тип:
<string>
Имя File.
file.lastModified¶
- Тип:
<number>
Дата последнего изменения File.
API модуля node:buffer¶
Хотя объект Buffer доступен глобально, дополнительные API, связанные с Buffer, доступны только через модуль node:buffer (require('node:buffer')).
buffer.atob(data)¶
Стабильность: 3 - Закрыто. Вместо этого используйте
Buffer.from(data, 'base64').
data<any>Входная строка в Base64.
Декодирует строку Base64 в байты и кодирует эти байты в строку Latin-1 (ISO-8859-1).
data может быть любым значением JavaScript, приводимым к строке.
Функция оставлена для совместимости со старыми веб-API и не должна использоваться в новом коде: строки для двоичных данных и отсутствие типизированных массивов устарели. В коде на Node.js преобразование между base64 и двоичными данными делайте через Buffer.from(str, 'base64') и buf.toString('base64').
Доступна автоматическая миграция (исходники:
1 | |
buffer.btoa(data)¶
Стабильность: 3 - Закрыто. Вместо этого используйте
buf.toString('base64').
data<any>Строка ASCII (Latin1).
Декодирует строку в байты по Latin-1 (ISO-8859) и кодирует байты в Base64.
data может быть любым значением JavaScript, приводимым к строке.
Функция оставлена для совместимости со старыми веб-API и не должна использоваться в новом коде. В коде на Node.js используйте Buffer.from(str, 'base64') и buf.toString('base64').
Доступна автоматическая миграция (исходники:
1 | |
buffer.isAscii(input)¶
input<Buffer>|<ArrayBuffer>|<TypedArray>Входные данные для проверки.- Возвращает:
<boolean>
Возвращает true, если input содержит только корректные данные в ASCII, в том числе при пустом input.
Выбрасывает исключение, если input — отсоединённый ArrayBuffer.
buffer.isUtf8(input)¶
input<Buffer>|<ArrayBuffer>|<TypedArray>Входные данные для проверки.- Возвращает:
<boolean>
Возвращает true, если input содержит только корректные данные UTF-8, в том числе при пустом input.
Выбрасывает исключение, если input — отсоединённый ArrayBuffer.
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.
Выбрасывает исключение при недопустимых fromEnc или toEnc или если такое перекодирование запрещено.
buffer.transcode() поддерживает кодировки: 'ascii', 'utf8', 'utf16le', 'ucs2', 'latin1' и 'binary'.
При невозможности представить последовательность байт в целевой кодировке используются символы замены. Например:
1 2 3 4 5 | |
1 2 3 4 5 | |
Так как символ евро (€) не представим в US-ASCII, в результате перекодирования он заменяется на ?.
Константы Buffer¶
buffer.constants.MAX_LENGTH¶
- Тип:
<integer>Наибольший допустимый размер одного экземпляраBuffer.
На 32-битных архитектурах значение равно 231 - 1 (около 2 ГиБ).
На 64-битных — Number.MAX_SAFE_INTEGER (253 - 1, около 8 ПиБ).
Внутри соответствует v8::Uint8Array::kMaxLength.
То же значение доступно как buffer.kMaxLength.
buffer.constants.MAX_STRING_LENGTH¶
- Тип:
<integer>Наибольшая допустимая длина одного примитиваstring.
Наибольшая длина length у примитива string в UTF-16 кодовых единицах.
Значение может зависеть от движка JavaScript.
Buffer.from(), Buffer.alloc() и Buffer.allocUnsafe()¶
В версиях Node.js до 6.0.0 экземпляры Buffer создавались функцией-конструктором Buffer, которая выделяла память под возвращаемый Buffer по-разному в зависимости от аргументов:
- Передача числа первым аргументом в
Buffer()(напримерnew Buffer(10)) выделяет новый объектBufferзаданного размера. До Node.js 8.0.0 память для таких экземпляров не инициализировалась и могла содержать конфиденциальные данные. Такие экземпляры нужно было затем инициализировать черезbuf.fill(0)или записью во весьBufferдо чтения. Поведение было намеренным ради производительности, но на практике потребовалось явнее различать «быстрый неинициализированный» и «медленный безопасный» буфер. С Node.js 8.0.0 выраженияBuffer(num)иnew Buffer(num)возвращаютBufferс инициализированной памятью. - Передача строки, массива или
Bufferпервым аргументом копирует данные объекта вBuffer. - Передача ArrayBuffer или SharedArrayBuffer возвращает
Buffer, разделяющий выделенную память с соответствующим буфером массива.
Так как поведение new Buffer() зависит от типа первого аргумента, при недостаточной проверке аргументов или инициализации можно непреднамеренно создать проблемы безопасности и надёжности.
Например, если злоумышленник заставит приложение получить число там, где ожидалась строка, может вызваться new Buffer(100) вместо new Buffer("100") — будет выделен буфер на 100 байт вместо трёх байт со строкой "100". Такое часто возможно через JSON API: типы числа и строки различимы, и в наивный код без проверки можно подставить число. До 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), но гарантирует отсутствие старых чувствительных данных. При нечисловомsizeвыбрасываетсяTypeError.Buffer.allocUnsafe(size)иBuffer.allocUnsafeSlow(size)возвращают новый неинициализированный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(), не обнуляются. Флаг может заметно снизить производительность; включайте его только если нужно гарантировать отсутствие старых данных в новой памяти.
1 2 3 | |
Почему Buffer.allocUnsafe() и Buffer.allocUnsafeSlow() «небезопасны»?¶
При вызове Buffer.allocUnsafe() и Buffer.allocUnsafeSlow() выделенный участок памяти не инициализирован (не обнулён). Это ускоряет выделение, но в памяти могут остаться старые данные. Использование Buffer от Buffer.allocUnsafe() без полной перезаписи может привести к утечке этих данных при чтении.
Производительность Buffer.allocUnsafe() выше, но нужна повышенная осторожность, чтобы не ввести уязвимости.