Buffer#

Stability: 2 - Stable

Source Code:lib/buffer.js

Buffer objects are used to represent a fixed-length sequence of bytes. ManyNode.js APIs supportBuffers.

TheBuffer class is a subclass of JavaScript's<Uint8Array> class andextends it with methods that cover additional use cases. Node.js APIs acceptplain<Uint8Array>s whereverBuffers are supported as well.

While theBuffer class is available within the global scope, it is stillrecommended to explicitly reference it via an import or require statement.

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

Buffers and character encodings#

History
VersionChanges
v15.7.0, v14.18.0

Introducedbase64url encoding.

v6.4.0

Introducedlatin1 as an alias forbinary.

v5.0.0

Removed the deprecatedraw andraws encodings.

When converting betweenBuffers and strings, a character encoding may bespecified. If no character encoding is specified, UTF-8 will be used as thedefault.

import {Buffer }from'node:buffer';const buf =Buffer.from('hello world','utf8');console.log(buf.toString('hex'));// Prints: 68656c6c6f20776f726c64console.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>const {Buffer } =require('node:buffer');const buf =Buffer.from('hello world','utf8');console.log(buf.toString('hex'));// Prints: 68656c6c6f20776f726c64console.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 buffers accept all case variations of encoding strings that theyreceive. For example, UTF-8 can be specified as'utf8','UTF8', or'uTf8'.

The character encodings currently supported by Node.js are the following:

  • 'utf8' (alias:'utf-8'): Multi-byte encoded Unicode characters. Many webpages and other document formats useUTF-8. This is the default characterencoding. When decoding aBuffer into a string that does not exclusivelycontain valid UTF-8 data, the Unicode replacement characterU+FFFD � will beused to represent those errors.

  • 'utf16le' (alias:'utf-16le'): Multi-byte encoded Unicode characters.Unlike'utf8', each character in the string will be encoded using either 2or 4 bytes. Node.js only supports thelittle-endian variant ofUTF-16.

  • 'latin1': Latin-1 stands forISO-8859-1. This character encoding onlysupports the Unicode characters fromU+0000 toU+00FF. Each character isencoded using a single byte. Characters that do not fit into that range aretruncated and will be mapped to characters in that range.

Converting aBuffer into a string using one of the above is referred to asdecoding, and converting a string into aBuffer is referred to as encoding.

Node.js also supports the following binary-to-text encodings. Forbinary-to-text encodings, the naming convention is reversed: Converting aBuffer into a string is typically referred to as encoding, and converting astring into aBuffer as decoding.

  • 'base64':Base64 encoding. When creating aBuffer from a string,this encoding will also correctly accept "URL and Filename Safe Alphabet" asspecified inRFC 4648, Section 5. Whitespace characters such as spaces,tabs, and new lines contained within the base64-encoded string are ignored.

  • 'base64url':base64url encoding as specified inRFC 4648, Section 5. When creating aBuffer from a string, thisencoding will also correctly accept regular base64-encoded strings. Whenencoding aBuffer to a string, this encoding will omit padding.

  • 'hex': Encode each byte as two hexadecimal characters. Data truncationmay occur when decoding strings that do not exclusively consist of an evennumber of hexadecimal characters. See below for an example.

The following legacy character encodings are also supported:

  • 'ascii': For 7-bitASCII data only. When encoding a string into aBuffer, this is equivalent to using'latin1'. When decoding aBufferinto a string, using this encoding will additionally unset the highest bit ofeach byte before decoding as'latin1'.Generally, there should be no reason to use this encoding, as'utf8'(or, if the data is known to always be ASCII-only,'latin1') will be abetter choice when encoding or decoding ASCII-only text. It is only providedfor legacy compatibility.

  • 'binary': Alias for'latin1'.The name of this encoding can be very misleading, as all of theencodings listed here convert between strings and binary data. For convertingbetween strings andBuffers, typically'utf8' is the right choice.

  • 'ucs2','ucs-2': Aliases of'utf16le'. UCS-2 used to refer to a variantof UTF-16 that did not support characters that had code points larger thanU+FFFF. In Node.js, these code points are always supported.

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

Modern Web browsers follow theWHATWG Encoding Standard which aliasesboth'latin1' and'ISO-8859-1' to'win-1252'. This means that while doingsomething likehttp.get(), if the returned charset is one of those listed inthe WHATWG specification it is possible that the server actually returned'win-1252'-encoded data, and using'latin1' encoding may incorrectly decodethe characters.

Buffers and TypedArrays#

History
VersionChanges
v3.0.0

TheBuffer class now inherits fromUint8Array.

Buffer instances are also JavaScript<Uint8Array> and<TypedArray>instances. All<TypedArray> methods are available onBuffers. There are,however, subtle incompatibilities between theBuffer API and the<TypedArray> API.

In particular:

There are two ways to create new<TypedArray> instances from aBuffer:

  • Passing aBuffer to a<TypedArray> constructor will copy theBuffer'scontents, interpreted as an array of integers, and not as a byte sequenceof the target type.
import {Buffer }from'node:buffer';const buf =Buffer.from([1,2,3,4]);const uint32array =newUint32Array(buf);console.log(uint32array);// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3,4]);const uint32array =newUint32Array(buf);console.log(uint32array);// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]
import {Buffer }from'node:buffer';const buf =Buffer.from('hello','utf16le');const uint16array =newUint16Array(  buf.buffer,  buf.byteOffset,  buf.length /Uint16Array.BYTES_PER_ELEMENT);console.log(uint16array);// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]const {Buffer } =require('node:buffer');const buf =Buffer.from('hello','utf16le');const uint16array =newUint16Array(  buf.buffer,  buf.byteOffset,  buf.length /Uint16Array.BYTES_PER_ELEMENT);console.log(uint16array);// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]

It is possible to create a newBuffer that shares the same allocatedmemory as a<TypedArray> instance by using theTypedArray object's.buffer property in the same way.Buffer.from()behaves likenew Uint8Array() in this context.

import {Buffer }from'node:buffer';const arr =newUint16Array(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>const {Buffer } =require('node:buffer');const arr =newUint16Array(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>

When creating aBuffer using a<TypedArray>'s.buffer, it ispossible to use only a portion of the underlying<ArrayBuffer> by passing inbyteOffset andlength parameters.

import {Buffer }from'node:buffer';const arr =newUint16Array(20);const buf =Buffer.from(arr.buffer,0,16);console.log(buf.length);// Prints: 16const {Buffer } =require('node:buffer');const arr =newUint16Array(20);const buf =Buffer.from(arr.buffer,0,16);console.log(buf.length);// Prints: 16

TheBuffer.from() andTypedArray.from() have different signatures andimplementations. Specifically, the<TypedArray> variants accept a secondargument that is a mapping function that is invoked on every element of thetyped array:

  • TypedArray.from(source[, mapFn[, thisArg]])

TheBuffer.from() method, however, does not support the use of a mappingfunction:

Buffers and iteration#

Buffer instances can be iterated over usingfor..of syntax:

import {Buffer }from'node:buffer';const buf =Buffer.from([1,2,3]);for (const bof buf) {console.log(b);}// Prints://   1//   2//   3const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3]);for (const bof buf) {console.log(b);}// Prints://   1//   2//   3

Additionally, thebuf.values(),buf.keys(), andbuf.entries() methods can be used to create iterators.

Class:Blob#

History
VersionChanges
v18.0.0, v16.17.0

No longer experimental.

v15.7.0, v14.18.0

Added in: v15.7.0, v14.18.0

A<Blob> encapsulates immutable, raw data that can be safely shared acrossmultiple worker threads.

new buffer.Blob([sources[, options]])#

History
VersionChanges
v16.7.0

Added the standardendings option to replace line-endings, and removed the non-standardencoding option.

v15.7.0, v14.18.0

Added in: v15.7.0, v14.18.0

Creates a newBlob object containing a concatenation of the given sources.

<ArrayBuffer>,<TypedArray>,<DataView>, and<Buffer> sources are copied intothe 'Blob' and can therefore be safely modified after the 'Blob' is created.

String sources are encoded as UTF-8 byte sequences and copied into the Blob.Unmatched surrogate pairs within each string part will be replaced by UnicodeU+FFFD replacement characters.

blob.arrayBuffer()#

Added in: v15.7.0, v14.18.0

Returns a promise that fulfills with an<ArrayBuffer> containing a copy oftheBlob data.

blob.bytes()#
Added in: v22.3.0, v20.16.0

Theblob.bytes() method returns the byte of theBlob object as aPromise<Uint8Array>.

const blob =newBlob(['hello']);blob.bytes().then((bytes) => {console.log(bytes);// Outputs: Uint8Array(5) [ 104, 101, 108, 108, 111 ]});

blob.size#

Added in: v15.7.0, v14.18.0

The total size of theBlob in bytes.

blob.slice([start[, end[, type]]])#

Added in: v15.7.0, v14.18.0

Creates and returns a newBlob containing a subset of thisBlob objectsdata. The originalBlob is not altered.

blob.stream()#

Added in: v16.7.0

Returns a newReadableStream that allows the content of theBlob to be read.

blob.text()#

Added in: v15.7.0, v14.18.0

Returns a promise that fulfills with the contents of theBlob decoded as aUTF-8 string.

blob.type#

Added in: v15.7.0, v14.18.0

The content-type of theBlob.

Blob objects andMessageChannel#

Once a<Blob> object is created, it can be sent viaMessagePort to multipledestinations without transferring or immediately copying the data. The datacontained by theBlob is copied only when thearrayBuffer() ortext()methods are called.

import {Blob }from'node:buffer';import {setTimeoutas delay }from'node:timers/promises';const blob =newBlob(['hello there']);const mc1 =newMessageChannel();const mc2 =newMessageChannel();mc1.port1.onmessage =async ({ data }) => {console.log(await data.arrayBuffer());  mc1.port1.close();};mc2.port1.onmessage =async ({ data }) => {awaitdelay(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);const {Blob } =require('node:buffer');const {setTimeout: delay } =require('node:timers/promises');const blob =newBlob(['hello there']);const mc1 =newMessageChannel();const mc2 =newMessageChannel();mc1.port1.onmessage =async ({ data }) => {console.log(await data.arrayBuffer());  mc1.port1.close();};mc2.port1.onmessage =async ({ data }) => {awaitdelay(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);

Class:Buffer#

TheBuffer class is a global type for dealing with binary data directly.It can be constructed in a variety of ways.

Static method:Buffer.alloc(size[, fill[, encoding]])#

History
VersionChanges
v20.0.0

Throw ERR_INVALID_ARG_TYPE or ERR_OUT_OF_RANGE instead of ERR_INVALID_ARG_VALUE for invalid input arguments.

v15.0.0

Throw ERR_INVALID_ARG_VALUE instead of ERR_INVALID_OPT_VALUE for invalid input arguments.

v10.0.0

Attempting to fill a non-zero length buffer with a zero length buffer triggers a thrown exception.

v10.0.0

Specifying an invalid string forfill triggers a thrown exception.

v8.9.3

Specifying an invalid string forfill now results in a zero-filled buffer.

v5.10.0

Added in: v5.10.0

Allocates a newBuffer ofsize bytes. Iffill isundefined, theBuffer will be zero-filled.

import {Buffer }from'node:buffer';const buf =Buffer.alloc(5);console.log(buf);// Prints: <Buffer 00 00 00 00 00>const {Buffer } =require('node:buffer');const buf =Buffer.alloc(5);console.log(buf);// Prints: <Buffer 00 00 00 00 00>

Ifsize is larger thanbuffer.constants.MAX_LENGTH or smaller than 0,ERR_OUT_OF_RANGEis thrown.

Iffill is specified, the allocatedBuffer will be initialized by callingbuf.fill(fill).

import {Buffer }from'node:buffer';const buf =Buffer.alloc(5,'a');console.log(buf);// Prints: <Buffer 61 61 61 61 61>const {Buffer } =require('node:buffer');const buf =Buffer.alloc(5,'a');console.log(buf);// Prints: <Buffer 61 61 61 61 61>

If bothfill andencoding are specified, the allocatedBuffer will beinitialized by callingbuf.fill(fill, encoding).

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

CallingBuffer.alloc() can be measurably slower than the alternativeBuffer.allocUnsafe() but ensures that the newly createdBuffer instancecontents will never contain sensitive data from previous allocations, includingdata that might not have been allocated forBuffers.

ATypeError will be thrown ifsize is not a number.

Static method:Buffer.allocUnsafe(size)#

History
VersionChanges
v20.0.0

Throw ERR_INVALID_ARG_TYPE or ERR_OUT_OF_RANGE instead of ERR_INVALID_ARG_VALUE for invalid input arguments.

v15.0.0

Throw ERR_INVALID_ARG_VALUE instead of ERR_INVALID_OPT_VALUE for invalid input arguments.

v7.0.0

Passing a negativesize will now throw an error.

v5.10.0

Added in: v5.10.0

Allocates a newBuffer ofsize bytes. Ifsize is larger thanbuffer.constants.MAX_LENGTH or smaller than 0,ERR_OUT_OF_RANGEis thrown.

The underlying memory forBuffer instances created in this way isnotinitialized. The contents of the newly createdBuffer are unknown andmay contain sensitive data. UseBuffer.alloc() instead to initializeBuffer instances with zeroes.

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

ATypeError will be thrown ifsize is not a number.

TheBuffer module pre-allocates an internalBuffer instance ofsizeBuffer.poolSize that is used as a pool for the fast allocation of newBuffer instances created usingBuffer.allocUnsafe(),Buffer.from(array),Buffer.from(string), andBuffer.concat() only whensize is less thanBuffer.poolSize >>> 1 (floor ofBuffer.poolSize divided by two).

Use of this pre-allocated internal memory pool is a key difference betweencallingBuffer.alloc(size, fill) vs.Buffer.allocUnsafe(size).fill(fill).Specifically,Buffer.alloc(size, fill) willnever use the internalBufferpool, whileBuffer.allocUnsafe(size).fill(fill)will use the internalBuffer pool ifsize is less than or equal to halfBuffer.poolSize. Thedifference is subtle but can be important when an application requires theadditional performance thatBuffer.allocUnsafe() provides.

Static method:Buffer.allocUnsafeSlow(size)#

History
VersionChanges
v20.0.0

Throw ERR_INVALID_ARG_TYPE or ERR_OUT_OF_RANGE instead of ERR_INVALID_ARG_VALUE for invalid input arguments.

v15.0.0

Throw ERR_INVALID_ARG_VALUE instead of ERR_INVALID_OPT_VALUE for invalid input arguments.

v5.12.0

Added in: v5.12.0

Allocates a newBuffer ofsize bytes. Ifsize is larger thanbuffer.constants.MAX_LENGTH or smaller than 0,ERR_OUT_OF_RANGEis thrown. A zero-lengthBuffer is created ifsize is 0.

The underlying memory forBuffer instances created in this way isnotinitialized. The contents of the newly createdBuffer are unknown andmay contain sensitive data. Usebuf.fill(0) to initializesuchBuffer instances with zeroes.

When usingBuffer.allocUnsafe() to allocate newBuffer instances,allocations less thanBuffer.poolSize >>> 1 (4KiB when default poolSize is used) are slicedfrom a single pre-allocatedBuffer. This allows applications to avoid thegarbage collection overhead of creating many individually allocatedBufferinstances. This approach improves both performance and memory usage byeliminating the need to track and clean up as many individualArrayBuffer objects.

However, in the case where a developer may need to retain a small chunk ofmemory from a pool for an indeterminate amount of time, it may be appropriateto create an un-pooledBuffer instance usingBuffer.allocUnsafeSlow() andthen copying out the relevant bits.

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

ATypeError will be thrown ifsize is not a number.

Static method:Buffer.byteLength(string[, encoding])#

History
VersionChanges
v7.0.0

Passing invalid input will now throw an error.

v5.10.0

Thestring parameter can now be anyTypedArray,DataView orArrayBuffer.

v0.1.90

Added in: v0.1.90

Returns the byte length of a string when encoded usingencoding.This is not the same asString.prototype.length, which does not accountfor the encoding that is used to convert the string into bytes.

For'base64','base64url', and'hex', this function assumes valid input.For strings that contain non-base64/hex-encoded data (e.g. whitespace), thereturn value might be greater than the length of aBuffer created from thestring.

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 bytesconst {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

Whenstring is a<Buffer> |<DataView> |<TypedArray> |<ArrayBuffer> |<SharedArrayBuffer>,the byte length as reported by.byteLength is returned.

Static method:Buffer.compare(buf1, buf2)#

History
VersionChanges
v8.0.0

The arguments can now beUint8Arrays.

v0.11.13

Added in: v0.11.13

Comparesbuf1 tobuf2, typically for the purpose of sorting arrays ofBuffer instances. This is equivalent to callingbuf1.compare(buf2).

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].)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].)

Static method:Buffer.concat(list[, totalLength])#

History
VersionChanges
v8.0.0

The elements oflist can now beUint8Arrays.

v0.7.11

Added in: v0.7.11

Returns a newBuffer which is the result of concatenating all theBufferinstances in thelist together.

If the list has no items, or if thetotalLength is 0, then a new zero-lengthBuffer is returned.

IftotalLength is not provided, it is calculated from theBuffer instancesinlist by adding their lengths.

IftotalLength is provided, it is coerced to an unsigned integer. If thecombined length of theBuffers inlist exceedstotalLength, the result istruncated tototalLength. If the combined length of theBuffers inlist isless thantotalLength, the remaining space is filled with zeros.

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: 42const bufA =Buffer.concat([buf1, buf2, buf3], totalLength);console.log(bufA);// Prints: <Buffer 00 00 00 00 ...>console.log(bufA.length);// Prints: 42const {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: 42const bufA =Buffer.concat([buf1, buf2, buf3], totalLength);console.log(bufA);// Prints: <Buffer 00 00 00 00 ...>console.log(bufA.length);// Prints: 42

Buffer.concat() may also use the internalBuffer pool likeBuffer.allocUnsafe() does.

Static method:Buffer.copyBytesFrom(view[, offset[, length]])#

Added in: v19.8.0, v18.16.0

Copies the underlying memory ofview into a newBuffer.

const u16 =newUint16Array([0,0xffff]);const buf =Buffer.copyBytesFrom(u16,1,1);u16[1] =0;console.log(buf.length);// 2console.log(buf[0]);// 255console.log(buf[1]);// 255

Static method:Buffer.from(array)#

Added in: v5.10.0

Allocates a newBuffer using anarray of bytes in the range0255.Array entries outside that range will be truncated to fit into it.

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

Ifarray is anArray-like object (that is, one with alength property oftypenumber), it is treated as if it is an array, unless it is aBuffer oraUint8Array. This means all otherTypedArray variants get treated as anArray. To create aBuffer from the bytes backing aTypedArray, useBuffer.copyBytesFrom().

ATypeError will be thrown ifarray is not anArray or another typeappropriate forBuffer.from() variants.

Buffer.from(array) andBuffer.from(string) may also use the internalBuffer pool likeBuffer.allocUnsafe() does.

Static method:Buffer.from(arrayBuffer[, byteOffset[, length]])#

Added in: v5.10.0

This creates a view of the<ArrayBuffer> without copying the underlyingmemory. For example, when passed a reference to the.buffer property of a<TypedArray> instance, the newly createdBuffer will share the sameallocated memory as the<TypedArray>'s underlyingArrayBuffer.

import {Buffer }from'node:buffer';const arr =newUint16Array(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>const {Buffer } =require('node:buffer');const arr =newUint16Array(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>

The optionalbyteOffset andlength arguments specify a memory range withinthearrayBuffer that will be shared by theBuffer.

import {Buffer }from'node:buffer';const ab =newArrayBuffer(10);const buf =Buffer.from(ab,0,2);console.log(buf.length);// Prints: 2const {Buffer } =require('node:buffer');const ab =newArrayBuffer(10);const buf =Buffer.from(ab,0,2);console.log(buf.length);// Prints: 2

ATypeError will be thrown ifarrayBuffer is not an<ArrayBuffer> or a<SharedArrayBuffer> or another type appropriate forBuffer.from()variants.

It is important to remember that a backingArrayBuffer can cover a rangeof memory that extends beyond the bounds of aTypedArray view. A newBuffer created using thebuffer property of aTypedArray may extendbeyond the range of theTypedArray:

import {Buffer }from'node:buffer';const arrA =Uint8Array.from([0x63,0x64,0x65,0x66]);// 4 elementsconst arrB =newUint8Array(arrA.buffer,1,2);// 2 elementsconsole.log(arrA.buffer === arrB.buffer);// trueconst buf =Buffer.from(arrB.buffer);console.log(buf);// Prints: <Buffer 63 64 65 66>const {Buffer } =require('node:buffer');const arrA =Uint8Array.from([0x63,0x64,0x65,0x66]);// 4 elementsconst arrB =newUint8Array(arrA.buffer,1,2);// 2 elementsconsole.log(arrA.buffer === arrB.buffer);// trueconst buf =Buffer.from(arrB.buffer);console.log(buf);// Prints: <Buffer 63 64 65 66>

Static method:Buffer.from(buffer)#

Added in: v5.10.0

Copies the passedbuffer data onto a newBuffer instance.

import {Buffer }from'node:buffer';const buf1 =Buffer.from('buffer');const buf2 =Buffer.from(buf1);buf1[0] =0x61;console.log(buf1.toString());// Prints: aufferconsole.log(buf2.toString());// Prints: bufferconst {Buffer } =require('node:buffer');const buf1 =Buffer.from('buffer');const buf2 =Buffer.from(buf1);buf1[0] =0x61;console.log(buf1.toString());// Prints: aufferconsole.log(buf2.toString());// Prints: buffer

ATypeError will be thrown ifbuffer is not aBuffer or another typeappropriate forBuffer.from() variants.

Static method:Buffer.from(object[, offsetOrEncoding[, length]])#

Added in: v8.2.0

For objects whosevalueOf() function returns a value not strictly equal toobject, returnsBuffer.from(object.valueOf(), offsetOrEncoding, length).

import {Buffer }from'node:buffer';const buf =Buffer.from(newString('this is a test'));// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>const {Buffer } =require('node:buffer');const buf =Buffer.from(newString('this is a test'));// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>

For objects that supportSymbol.toPrimitive, returnsBuffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding).

import {Buffer }from'node:buffer';classFoo {  [Symbol.toPrimitive]() {return'this is a test';  }}const buf =Buffer.from(newFoo(),'utf8');// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>const {Buffer } =require('node:buffer');classFoo {  [Symbol.toPrimitive]() {return'this is a test';  }}const buf =Buffer.from(newFoo(),'utf8');// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>

ATypeError will be thrown ifobject does not have the mentioned methods oris not of another type appropriate forBuffer.from() variants.

Static method:Buffer.from(string[, encoding])#

Added in: v5.10.0

Creates a newBuffer containingstring. Theencoding parameter identifiesthe character encoding to be used when convertingstring into bytes.

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éstconsole.log(buf2.toString());// Prints: this is a téstconsole.log(buf1.toString('latin1'));// Prints: this is a téstconst {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éstconsole.log(buf2.toString());// Prints: this is a téstconsole.log(buf1.toString('latin1'));// Prints: this is a tést

ATypeError will be thrown ifstring is not a string or another typeappropriate forBuffer.from() variants.

Buffer.from(string) may also use the internalBuffer pool likeBuffer.allocUnsafe() does.

Static method:Buffer.isBuffer(obj)#

Added in: v0.1.101

Returnstrue ifobj is aBuffer,false otherwise.

import {Buffer }from'node:buffer';Buffer.isBuffer(Buffer.alloc(10));// trueBuffer.isBuffer(Buffer.from('foo'));// trueBuffer.isBuffer('a string');// falseBuffer.isBuffer([]);// falseBuffer.isBuffer(newUint8Array(1024));// falseconst {Buffer } =require('node:buffer');Buffer.isBuffer(Buffer.alloc(10));// trueBuffer.isBuffer(Buffer.from('foo'));// trueBuffer.isBuffer('a string');// falseBuffer.isBuffer([]);// falseBuffer.isBuffer(newUint8Array(1024));// false

Static method:Buffer.isEncoding(encoding)#

Added in: v0.9.1

Returnstrue ifencoding is the name of a supported character encoding,orfalse otherwise.

import {Buffer }from'node:buffer';console.log(Buffer.isEncoding('utf8'));// Prints: trueconsole.log(Buffer.isEncoding('hex'));// Prints: trueconsole.log(Buffer.isEncoding('utf/8'));// Prints: falseconsole.log(Buffer.isEncoding(''));// Prints: falseconst {Buffer } =require('node:buffer');console.log(Buffer.isEncoding('utf8'));// Prints: trueconsole.log(Buffer.isEncoding('hex'));// Prints: trueconsole.log(Buffer.isEncoding('utf/8'));// Prints: falseconsole.log(Buffer.isEncoding(''));// Prints: false

Class property:Buffer.poolSize#

Added in: v0.11.3

This is the size (in bytes) of pre-allocated internalBuffer instances usedfor pooling. This value may be modified.

buf[index]#

The index operator[index] can be used to get and set the octet at positionindex inbuf. The values refer to individual bytes, so the legal valuerange is between0x00 and0xFF (hex) or0 and255 (decimal).

This operator is inherited fromUint8Array, so its behavior on out-of-boundsaccess is the same asUint8Array. In other words,buf[index] returnsundefined whenindex is negative or greater or equal tobuf.length, andbuf[index] = value does not modify the buffer ifindex is negative or>= buf.length.

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.jsconst {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> The underlyingArrayBuffer object based on which thisBufferobject is created.

ThisArrayBuffer is not guaranteed to correspond exactly to the originalBuffer. See the notes onbuf.byteOffset for details.

import {Buffer }from'node:buffer';const arrayBuffer =newArrayBuffer(16);const buffer =Buffer.from(arrayBuffer);console.log(buffer.buffer === arrayBuffer);// Prints: trueconst {Buffer } =require('node:buffer');const arrayBuffer =newArrayBuffer(16);const buffer =Buffer.from(arrayBuffer);console.log(buffer.buffer === arrayBuffer);// Prints: true

buf.byteOffset#

  • <integer> ThebyteOffset of theBuffer's underlyingArrayBuffer object.

When settingbyteOffset inBuffer.from(ArrayBuffer, byteOffset, length),or sometimes when allocating aBuffer smaller thanBuffer.poolSize, thebuffer does not start from a zero offset on the underlyingArrayBuffer.

This can cause problems when accessing the underlyingArrayBuffer directlyusingbuf.buffer, as other parts of theArrayBuffer may be unrelatedto theBuffer object itself.

A common issue when creating aTypedArray object that shares its memory withaBuffer is that in this case one needs to specify thebyteOffset correctly:

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`.newInt8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);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`.newInt8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);

buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])#

History
VersionChanges
v8.0.0

Thetarget parameter can now be aUint8Array.

v5.11.0

Additional parameters for specifying offsets are supported now.

v0.11.13

Added in: v0.11.13

  • target<Buffer> |<Uint8Array> ABuffer or<Uint8Array> with which tocomparebuf.
  • targetStart<integer> The offset withintarget at which to begincomparison.Default:0.
  • targetEnd<integer> The offset withintarget at which to end comparison(not inclusive).Default:target.length.
  • sourceStart<integer> The offset withinbuf at which to begin comparison.Default:0.
  • sourceEnd<integer> The offset withinbuf at which to end comparison(not inclusive).Default:buf.length.
  • Returns:<integer>

Comparesbuf withtarget and returns a number indicating whetherbufcomes before, after, or is the same astarget in sort order.Comparison is based on the actual sequence of bytes in eachBuffer.

  • 0 is returned iftarget is the same asbuf
  • 1 is returned iftarget should comebeforebuf when sorted.
  • -1 is returned iftarget should comeafterbuf when sorted.
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: 0console.log(buf1.compare(buf2));// Prints: -1console.log(buf1.compare(buf3));// Prints: -1console.log(buf2.compare(buf1));// Prints: 1console.log(buf2.compare(buf3));// Prints: 1console.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].)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: 0console.log(buf1.compare(buf2));// Prints: -1console.log(buf1.compare(buf3));// Prints: -1console.log(buf2.compare(buf1));// Prints: 1console.log(buf2.compare(buf3));// Prints: 1console.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].)

The optionaltargetStart,targetEnd,sourceStart, andsourceEndarguments can be used to limit the comparison to specific ranges withintargetandbuf respectively.

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: 0console.log(buf1.compare(buf2,0,6,4));// Prints: -1console.log(buf1.compare(buf2,5,6,5));// Prints: 1const {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: 0console.log(buf1.compare(buf2,0,6,4));// Prints: -1console.log(buf1.compare(buf2,5,6,5));// Prints: 1

ERR_OUT_OF_RANGE is thrown iftargetStart < 0,sourceStart < 0,targetEnd > target.byteLength, orsourceEnd > source.byteLength.

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])#

Added in: v0.1.90

Copies data from a region ofbuf to a region intarget, even if thetargetmemory region overlaps withbuf.

TypedArray.prototype.set() performs the same operation, and is availablefor all TypedArrays, including Node.jsBuffers, although it takesdifferent function arguments.

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!!!!!!!!!!!!!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!!!!!!!!!!!!!
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: efghijghijklmnopqrstuvwxyzconst {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()#

Added in: v1.1.0

Creates and returns aniterator of[index, byte] pairs from the contentsofbuf.

import {Buffer }from'node:buffer';// Log the entire contents of a `Buffer`.const buf =Buffer.from('buffer');for (const pairof buf.entries()) {console.log(pair);}// Prints://   [0, 98]//   [1, 117]//   [2, 102]//   [3, 102]//   [4, 101]//   [5, 114]const {Buffer } =require('node:buffer');// Log the entire contents of a `Buffer`.const buf =Buffer.from('buffer');for (const pairof buf.entries()) {console.log(pair);}// Prints://   [0, 98]//   [1, 117]//   [2, 102]//   [3, 102]//   [4, 101]//   [5, 114]

buf.equals(otherBuffer)#

History
VersionChanges
v8.0.0

The arguments can now beUint8Arrays.

v0.11.13

Added in: v0.11.13

Returnstrue if bothbuf andotherBuffer have exactly the same bytes,false otherwise. Equivalent tobuf.compare(otherBuffer) === 0.

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: trueconsole.log(buf1.equals(buf3));// Prints: falseconst {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: trueconsole.log(buf1.equals(buf3));// Prints: false

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

History
VersionChanges
v11.0.0

ThrowsERR_OUT_OF_RANGE instead ofERR_INDEX_OUT_OF_RANGE.

v10.0.0

Negativeend values throw anERR_INDEX_OUT_OF_RANGE error.

v10.0.0

Attempting to fill a non-zero length buffer with a zero length buffer triggers a thrown exception.

v10.0.0

Specifying an invalid string forvalue triggers a thrown exception.

v5.7.0

Theencoding parameter is supported now.

v0.5.0

Added in: v0.5.0

Fillsbuf with the specifiedvalue. If theoffset andend are not given,the entirebuf will be filled:

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 stringconst c =Buffer.allocUnsafe(5).fill('');console.log(c.fill(''));// Prints: <Buffer 00 00 00 00 00>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 stringconst c =Buffer.allocUnsafe(5).fill('');console.log(c.fill(''));// Prints: <Buffer 00 00 00 00 00>

value is coerced to auint32 value if it is not a string,Buffer, orinteger. If the resulting integer is greater than255 (decimal),buf will befilled withvalue & 255.

If the final write of afill() operation falls on a multi-byte character,then only the bytes of that character that fit intobuf are written:

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

Ifvalue contains invalid characters, it is truncated; if no validfill data remains, an exception is thrown:

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.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])#

Added in: v5.3.0
  • value<string> |<Buffer> |<Uint8Array> |<integer> What to search for.
  • byteOffset<integer> Where to begin searching inbuf. If negative, thenoffset is calculated from the end ofbuf.Default:0.
  • encoding<string> Ifvalue is a string, this is its encoding.Default:'utf8'.
  • Returns:<boolean>true ifvalue was found inbuf,false otherwise.

Equivalent tobuf.indexOf() !== -1.

import {Buffer }from'node:buffer';const buf =Buffer.from('this is a buffer');console.log(buf.includes('this'));// Prints: trueconsole.log(buf.includes('is'));// Prints: trueconsole.log(buf.includes(Buffer.from('a buffer')));// Prints: trueconsole.log(buf.includes(97));// Prints: true (97 is the decimal ASCII value for 'a')console.log(buf.includes(Buffer.from('a buffer example')));// Prints: falseconsole.log(buf.includes(Buffer.from('a buffer example').slice(0,8)));// Prints: trueconsole.log(buf.includes('this',4));// Prints: falseconst {Buffer } =require('node:buffer');const buf =Buffer.from('this is a buffer');console.log(buf.includes('this'));// Prints: trueconsole.log(buf.includes('is'));// Prints: trueconsole.log(buf.includes(Buffer.from('a buffer')));// Prints: trueconsole.log(buf.includes(97));// Prints: true (97 is the decimal ASCII value for 'a')console.log(buf.includes(Buffer.from('a buffer example')));// Prints: falseconsole.log(buf.includes(Buffer.from('a buffer example').slice(0,8)));// Prints: trueconsole.log(buf.includes('this',4));// Prints: false

buf.indexOf(value[, byteOffset][, encoding])#

History
VersionChanges
v8.0.0

Thevalue can now be aUint8Array.

v5.7.0, v4.4.0

Whenencoding is being passed, thebyteOffset parameter is no longer required.

v1.5.0

Added in: v1.5.0

  • value<string> |<Buffer> |<Uint8Array> |<integer> What to search for.
  • byteOffset<integer> Where to begin searching inbuf. If negative, thenoffset is calculated from the end ofbuf.Default:0.
  • encoding<string> Ifvalue is a string, this is the encoding used todetermine the binary representation of the string that will be searched for inbuf.Default:'utf8'.
  • Returns:<integer> The index of the first occurrence ofvalue inbuf, or-1 ifbuf does not containvalue.

Ifvalue is:

  • a string,value is interpreted according to the character encoding inencoding.
  • aBuffer or<Uint8Array>,value will be used in its entirety.To compare a partialBuffer, usebuf.subarray.
  • a number,value will be interpreted as an unsigned 8-bit integervalue between0 and255.
import {Buffer }from'node:buffer';const buf =Buffer.from('this is a buffer');console.log(buf.indexOf('this'));// Prints: 0console.log(buf.indexOf('is'));// Prints: 2console.log(buf.indexOf(Buffer.from('a buffer')));// Prints: 8console.log(buf.indexOf(97));// Prints: 8 (97 is the decimal ASCII value for 'a')console.log(buf.indexOf(Buffer.from('a buffer example')));// Prints: -1console.log(buf.indexOf(Buffer.from('a buffer example').slice(0,8)));// Prints: 8const utf16Buffer =Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','utf16le');console.log(utf16Buffer.indexOf('\u03a3',0,'utf16le'));// Prints: 4console.log(utf16Buffer.indexOf('\u03a3', -4,'utf16le'));// Prints: 6const {Buffer } =require('node:buffer');const buf =Buffer.from('this is a buffer');console.log(buf.indexOf('this'));// Prints: 0console.log(buf.indexOf('is'));// Prints: 2console.log(buf.indexOf(Buffer.from('a buffer')));// Prints: 8console.log(buf.indexOf(97));// Prints: 8 (97 is the decimal ASCII value for 'a')console.log(buf.indexOf(Buffer.from('a buffer example')));// Prints: -1console.log(buf.indexOf(Buffer.from('a buffer example').slice(0,8)));// Prints: 8const utf16Buffer =Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','utf16le');console.log(utf16Buffer.indexOf('\u03a3',0,'utf16le'));// Prints: 4console.log(utf16Buffer.indexOf('\u03a3', -4,'utf16le'));// Prints: 6

Ifvalue is not a string, number, orBuffer, this method will throw aTypeError. Ifvalue is a number, it will be coerced to a valid byte value,an integer between 0 and 255.

IfbyteOffset is not a number, it will be coerced to a number. If the resultof coercion isNaN or0, then the entire buffer will be searched. Thisbehavior matchesString.prototype.indexOf().

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', []));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', []));

Ifvalue is an empty string or emptyBuffer andbyteOffset is lessthanbuf.length,byteOffset will be returned. Ifvalue is empty andbyteOffset is at leastbuf.length,buf.length will be returned.

buf.keys()#

Added in: v1.1.0

Creates and returns aniterator ofbuf keys (indexes).

import {Buffer }from'node:buffer';const buf =Buffer.from('buffer');for (const keyof buf.keys()) {console.log(key);}// Prints://   0//   1//   2//   3//   4//   5const {Buffer } =require('node:buffer');const buf =Buffer.from('buffer');for (const keyof buf.keys()) {console.log(key);}// Prints://   0//   1//   2//   3//   4//   5

buf.lastIndexOf(value[, byteOffset][, encoding])#

History
VersionChanges
v8.0.0

Thevalue can now be aUint8Array.

v6.0.0

Added in: v6.0.0

  • value<string> |<Buffer> |<Uint8Array> |<integer> What to search for.
  • byteOffset<integer> Where to begin searching inbuf. If negative, thenoffset is calculated from the end ofbuf.Default:buf.length - 1.
  • encoding<string> Ifvalue is a string, this is the encoding used todetermine the binary representation of the string that will be searched for inbuf.Default:'utf8'.
  • Returns:<integer> The index of the last occurrence ofvalue inbuf, or-1 ifbuf does not containvalue.

Identical tobuf.indexOf(), except the last occurrence ofvalue is foundrather than the first occurrence.

import {Buffer }from'node:buffer';const buf =Buffer.from('this buffer is a buffer');console.log(buf.lastIndexOf('this'));// Prints: 0console.log(buf.lastIndexOf('buffer'));// Prints: 17console.log(buf.lastIndexOf(Buffer.from('buffer')));// Prints: 17console.log(buf.lastIndexOf(97));// Prints: 15 (97 is the decimal ASCII value for 'a')console.log(buf.lastIndexOf(Buffer.from('yolo')));// Prints: -1console.log(buf.lastIndexOf('buffer',5));// Prints: 5console.log(buf.lastIndexOf('buffer',4));// Prints: -1const utf16Buffer =Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','utf16le');console.log(utf16Buffer.lastIndexOf('\u03a3',undefined,'utf16le'));// Prints: 6console.log(utf16Buffer.lastIndexOf('\u03a3', -5,'utf16le'));// Prints: 4const {Buffer } =require('node:buffer');const buf =Buffer.from('this buffer is a buffer');console.log(buf.lastIndexOf('this'));// Prints: 0console.log(buf.lastIndexOf('buffer'));// Prints: 17console.log(buf.lastIndexOf(Buffer.from('buffer')));// Prints: 17console.log(buf.lastIndexOf(97));// Prints: 15 (97 is the decimal ASCII value for 'a')console.log(buf.lastIndexOf(Buffer.from('yolo')));// Prints: -1console.log(buf.lastIndexOf('buffer',5));// Prints: 5console.log(buf.lastIndexOf('buffer',4));// Prints: -1const utf16Buffer =Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','utf16le');console.log(utf16Buffer.lastIndexOf('\u03a3',undefined,'utf16le'));// Prints: 6console.log(utf16Buffer.lastIndexOf('\u03a3', -5,'utf16le'));// Prints: 4

Ifvalue is not a string, number, orBuffer, this method will throw aTypeError. Ifvalue is a number, it will be coerced to a valid byte value,an integer between 0 and 255.

IfbyteOffset is not a number, it will be coerced to a number. Any argumentsthat coerce toNaN, like{} orundefined, will search the whole buffer.This behavior matchesString.prototype.lastIndexOf().

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', []));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', []));

Ifvalue is an empty string or emptyBuffer,byteOffset will be returned.

buf.length#

Added in: v0.1.90

Returns the number of bytes inbuf.

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: 1234buf.write('some string',0,'utf8');console.log(buf.length);// Prints: 1234const {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: 1234buf.write('some string',0,'utf8');console.log(buf.length);// Prints: 1234

buf.parent#

Deprecated since: v8.0.0

Stability: 0 - Deprecated: Usebuf.buffer instead.

Thebuf.parent property is a deprecated alias forbuf.buffer.

buf.readBigInt64BE([offset])#

Added in: v12.0.0, v10.20.0
  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<bigint>

Reads a signed, big-endian 64-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signedvalues.

buf.readBigInt64LE([offset])#

Added in: v12.0.0, v10.20.0
  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<bigint>

Reads a signed, little-endian 64-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signedvalues.

buf.readBigUInt64BE([offset])#

History
VersionChanges
v14.10.0, v12.19.0

This function is also available asbuf.readBigUint64BE().

v12.0.0, v10.20.0

Added in: v12.0.0, v10.20.0

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<bigint>

Reads an unsigned, big-endian 64-bit integer frombuf at the specifiedoffset.

This function is also available under thereadBigUint64BE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff]);console.log(buf.readBigUInt64BE(0));// Prints: 4294967295nconst {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])#

History
VersionChanges
v14.10.0, v12.19.0

This function is also available asbuf.readBigUint64LE().

v12.0.0, v10.20.0

Added in: v12.0.0, v10.20.0

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<bigint>

Reads an unsigned, little-endian 64-bit integer frombuf at the specifiedoffset.

This function is also available under thereadBigUint64LE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff]);console.log(buf.readBigUInt64LE(0));// Prints: 18446744069414584320nconst {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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 8.Default:0.
  • Returns:<number>

Reads a 64-bit, big-endian double frombuf at the specifiedoffset.

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-304const {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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 8.Default:0.
  • Returns:<number>

Reads a 64-bit, little-endian double frombuf at the specifiedoffset.

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-270console.log(buf.readDoubleLE(1));// Throws ERR_OUT_OF_RANGE.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-270console.log(buf.readDoubleLE(1));// Throws ERR_OUT_OF_RANGE.

buf.readFloatBE([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<number>

Reads a 32-bit, big-endian float frombuf at the specifiedoffset.

import {Buffer }from'node:buffer';const buf =Buffer.from([1,2,3,4]);console.log(buf.readFloatBE(0));// Prints: 2.387939260590663e-38const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3,4]);console.log(buf.readFloatBE(0));// Prints: 2.387939260590663e-38

buf.readFloatLE([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<number>

Reads a 32-bit, little-endian float frombuf at the specifiedoffset.

import {Buffer }from'node:buffer';const buf =Buffer.from([1,2,3,4]);console.log(buf.readFloatLE(0));// Prints: 1.539989614439558e-36console.log(buf.readFloatLE(1));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3,4]);console.log(buf.readFloatLE(0));// Prints: 1.539989614439558e-36console.log(buf.readFloatLE(1));// Throws ERR_OUT_OF_RANGE.

buf.readInt8([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.0

Added in: v0.5.0

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 1.Default:0.
  • Returns:<integer>

Reads a signed 8-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signed values.

import {Buffer }from'node:buffer';const buf =Buffer.from([-1,5]);console.log(buf.readInt8(0));// Prints: -1console.log(buf.readInt8(1));// Prints: 5console.log(buf.readInt8(2));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([-1,5]);console.log(buf.readInt8(0));// Prints: -1console.log(buf.readInt8(1));// Prints: 5console.log(buf.readInt8(2));// Throws ERR_OUT_OF_RANGE.

buf.readInt16BE([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>

Reads a signed, big-endian 16-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signed values.

import {Buffer }from'node:buffer';const buf =Buffer.from([0,5]);console.log(buf.readInt16BE(0));// Prints: 5const {Buffer } =require('node:buffer');const buf =Buffer.from([0,5]);console.log(buf.readInt16BE(0));// Prints: 5

buf.readInt16LE([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>

Reads a signed, little-endian 16-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signed values.

import {Buffer }from'node:buffer';const buf =Buffer.from([0,5]);console.log(buf.readInt16LE(0));// Prints: 1280console.log(buf.readInt16LE(1));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([0,5]);console.log(buf.readInt16LE(0));// Prints: 1280console.log(buf.readInt16LE(1));// Throws ERR_OUT_OF_RANGE.

buf.readInt32BE([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>

Reads a signed, big-endian 32-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signed values.

import {Buffer }from'node:buffer';const buf =Buffer.from([0,0,0,5]);console.log(buf.readInt32BE(0));// Prints: 5const {Buffer } =require('node:buffer');const buf =Buffer.from([0,0,0,5]);console.log(buf.readInt32BE(0));// Prints: 5

buf.readInt32LE([offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>

Reads a signed, little-endian 32-bit integer frombuf at the specifiedoffset.

Integers read from aBuffer are interpreted as two's complement signed values.

import {Buffer }from'node:buffer';const buf =Buffer.from([0,0,0,5]);console.log(buf.readInt32LE(0));// Prints: 83886080console.log(buf.readInt32LE(1));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([0,0,0,5]);console.log(buf.readInt32LE(0));// Prints: 83886080console.log(buf.readInt32LE(1));// Throws ERR_OUT_OF_RANGE.

buf.readIntBE(offset, byteLength)#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to read. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>

ReadsbyteLength number of bytes frombuf at the specifiedoffsetand interprets the result as a big-endian, two's complement signed valuesupporting up to 48 bits of accuracy.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readIntBE(0,6).toString(16));// Prints: 1234567890abconsole.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.const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readIntBE(0,6).toString(16));// Prints: 1234567890abconsole.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)#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to read. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>

ReadsbyteLength number of bytes frombuf at the specifiedoffsetand interprets the result as a little-endian, two's complement signed valuesupporting up to 48 bits of accuracy.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readIntLE(0,6).toString(16));// Prints: -546f87a9cbeeconst {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])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUint8().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.0

Added in: v0.5.0

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 1.Default:0.
  • Returns:<integer>

Reads an unsigned 8-bit integer frombuf at the specifiedoffset.

This function is also available under thereadUint8 alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([1, -2]);console.log(buf.readUInt8(0));// Prints: 1console.log(buf.readUInt8(1));// Prints: 254console.log(buf.readUInt8(2));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([1, -2]);console.log(buf.readUInt8(0));// Prints: 1console.log(buf.readUInt8(1));// Prints: 254console.log(buf.readUInt8(2));// Throws ERR_OUT_OF_RANGE.

buf.readUInt16BE([offset])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUint16BE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>

Reads an unsigned, big-endian 16-bit integer frombuf at the specifiedoffset.

This function is also available under thereadUint16BE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56]);console.log(buf.readUInt16BE(0).toString(16));// Prints: 1234console.log(buf.readUInt16BE(1).toString(16));// Prints: 3456const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56]);console.log(buf.readUInt16BE(0).toString(16));// Prints: 1234console.log(buf.readUInt16BE(1).toString(16));// Prints: 3456

buf.readUInt16LE([offset])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUint16LE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>

Reads an unsigned, little-endian 16-bit integer frombuf at the specifiedoffset.

This function is also available under thereadUint16LE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56]);console.log(buf.readUInt16LE(0).toString(16));// Prints: 3412console.log(buf.readUInt16LE(1).toString(16));// Prints: 5634console.log(buf.readUInt16LE(2).toString(16));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56]);console.log(buf.readUInt16LE(0).toString(16));// Prints: 3412console.log(buf.readUInt16LE(1).toString(16));// Prints: 5634console.log(buf.readUInt16LE(2).toString(16));// Throws ERR_OUT_OF_RANGE.

buf.readUInt32BE([offset])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUint32BE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>

Reads an unsigned, big-endian 32-bit integer frombuf at the specifiedoffset.

This function is also available under thereadUint32BE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56,0x78]);console.log(buf.readUInt32BE(0).toString(16));// Prints: 12345678const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78]);console.log(buf.readUInt32BE(0).toString(16));// Prints: 12345678

buf.readUInt32LE([offset])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUint32LE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>

Reads an unsigned, little-endian 32-bit integer frombuf at the specifiedoffset.

This function is also available under thereadUint32LE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56,0x78]);console.log(buf.readUInt32LE(0).toString(16));// Prints: 78563412console.log(buf.readUInt32LE(1).toString(16));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78]);console.log(buf.readUInt32LE(0).toString(16));// Prints: 78563412console.log(buf.readUInt32LE(1).toString(16));// Throws ERR_OUT_OF_RANGE.

buf.readUIntBE(offset, byteLength)#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUintBE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to read. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>

ReadsbyteLength number of bytes frombuf at the specifiedoffsetand interprets the result as an unsigned big-endian integer supportingup to 48 bits of accuracy.

This function is also available under thereadUintBE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readUIntBE(0,6).toString(16));// Prints: 1234567890abconsole.log(buf.readUIntBE(1,6).toString(16));// Throws ERR_OUT_OF_RANGE.const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readUIntBE(0,6).toString(16));// Prints: 1234567890abconsole.log(buf.readUIntBE(1,6).toString(16));// Throws ERR_OUT_OF_RANGE.

buf.readUIntLE(offset, byteLength)#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.readUintLE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.11.15

Added in: v0.11.15

  • offset<integer> Number of bytes to skip before starting to read. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to read. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>

ReadsbyteLength number of bytes frombuf at the specifiedoffsetand interprets the result as an unsigned, little-endian integer supportingup to 48 bits of accuracy.

This function is also available under thereadUintLE alias.

import {Buffer }from'node:buffer';const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readUIntLE(0,6).toString(16));// Prints: ab9078563412const {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]])#

Added in: v3.0.0

Returns a newBuffer that references the same memory as the original, butoffset and cropped by thestart andend indexes.

Specifyingend greater thanbuf.length will return the same result asthat ofend equal tobuf.length.

This method is inherited fromTypedArray.prototype.subarray().

Modifying the newBuffer slice will modify the memory in the originalBufferbecause the allocated memory of the two objects overlap.

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: abcbuf1[0] =33;console.log(buf2.toString('ascii',0, buf2.length));// Prints: !bcconst {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: abcbuf1[0] =33;console.log(buf2.toString('ascii',0, buf2.length));// Prints: !bc

Specifying negative indexes causes the slice to be generated relative to theend ofbuf rather than the beginning.

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).)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]])#

History
VersionChanges
v17.5.0, v16.15.0

The buf.slice() method has been deprecated.

v7.0.0

All offsets are now coerced to integers before doing any calculations with them.

v7.1.0, v6.9.2

Coercing the offsets to integers now handles values outside the 32-bit integer range properly.

v0.3.0

Added in: v0.3.0

Stability: 0 - Deprecated: Usebuf.subarray instead.

Returns a newBuffer that references the same memory as the original, butoffset and cropped by thestart andend indexes.

This method is not compatible with theUint8Array.prototype.slice(),which is a superclass ofBuffer. To copy the slice, useUint8Array.prototype.slice().

import {Buffer }from'node:buffer';const buf =Buffer.from('buffer');const copiedBuf =Uint8Array.prototype.slice.call(buf);copiedBuf[0]++;console.log(copiedBuf.toString());// Prints: cufferconsole.log(buf.toString());// Prints: buffer// With buf.slice(), the original buffer is modified.const notReallyCopiedBuf = buf.slice();notReallyCopiedBuf[0]++;console.log(notReallyCopiedBuf.toString());// Prints: cufferconsole.log(buf.toString());// Also prints: cuffer (!)const {Buffer } =require('node:buffer');const buf =Buffer.from('buffer');const copiedBuf =Uint8Array.prototype.slice.call(buf);copiedBuf[0]++;console.log(copiedBuf.toString());// Prints: cufferconsole.log(buf.toString());// Prints: buffer// With buf.slice(), the original buffer is modified.const notReallyCopiedBuf = buf.slice();notReallyCopiedBuf[0]++;console.log(notReallyCopiedBuf.toString());// Prints: cufferconsole.log(buf.toString());// Also prints: cuffer (!)

buf.swap16()#

Added in: v5.10.0

Interpretsbuf as an array of unsigned 16-bit integers and swaps thebyte orderin-place. ThrowsERR_INVALID_BUFFER_SIZE ifbuf.lengthis not a multiple of 2.

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

One convenient use ofbuf.swap16() is to perform a fast in-place conversionbetween UTF-16 little-endian and UTF-16 big-endian:

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.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()#

Added in: v5.10.0

Interpretsbuf as an array of unsigned 32-bit integers and swaps thebyte orderin-place. ThrowsERR_INVALID_BUFFER_SIZE ifbuf.lengthis not a multiple of 4.

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.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()#

Added in: v6.3.0

Interpretsbuf as an array of 64-bit numbers and swaps byte orderin-place.ThrowsERR_INVALID_BUFFER_SIZE ifbuf.length is not a multiple of 8.

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.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()#

Added in: v0.9.2

Returns a JSON representation ofbuf.JSON.stringify() implicitly callsthis function when stringifying aBuffer instance.

Buffer.from() accepts objects in the format returned from this method.In particular,Buffer.from(buf.toJSON()) works likeBuffer.from(buf).

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>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]]])#

Added in: v0.1.90
  • encoding<string> The character encoding to use.Default:'utf8'.
  • start<integer> The byte offset to start decoding at.Default:0.
  • end<integer> The byte offset to stop decoding at (not inclusive).Default:buf.length.
  • Returns:<string>

Decodesbuf to a string according to the specified character encoding inencoding.start andend may be passed to decode only a subset ofbuf.

Ifencoding is'utf8' and a byte sequence in the input is not valid UTF-8,then each invalid byte is replaced with the replacement characterU+FFFD.

The maximum length of a string instance (in UTF-16 code units) is availableasbuffer.constants.MAX_STRING_LENGTH.

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: abcdefghijklmnopqrstuvwxyzconsole.log(buf1.toString('utf8',0,5));// Prints: abcdeconst buf2 =Buffer.from('tést');console.log(buf2.toString('hex'));// Prints: 74c3a97374console.log(buf2.toString('utf8',0,3));// Prints: téconsole.log(buf2.toString(undefined,0,3));// Prints: té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: abcdefghijklmnopqrstuvwxyzconsole.log(buf1.toString('utf8',0,5));// Prints: abcdeconst buf2 =Buffer.from('tést');console.log(buf2.toString('hex'));// Prints: 74c3a97374console.log(buf2.toString('utf8',0,3));// Prints: téconsole.log(buf2.toString(undefined,0,3));// Prints: té

buf.values()#

Added in: v1.1.0

Creates and returns aniterator forbuf values (bytes). This function iscalled automatically when aBuffer is used in afor..of statement.

import {Buffer }from'node:buffer';const buf =Buffer.from('buffer');for (const valueof buf.values()) {console.log(value);}// Prints://   98//   117//   102//   102//   101//   114for (const valueof buf) {console.log(value);}// Prints://   98//   117//   102//   102//   101//   114const {Buffer } =require('node:buffer');const buf =Buffer.from('buffer');for (const valueof buf.values()) {console.log(value);}// Prints://   98//   117//   102//   102//   101//   114for (const valueof buf) {console.log(value);}// Prints://   98//   117//   102//   102//   101//   114

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

Added in: v0.1.90
  • string<string> String to write tobuf.
  • offset<integer> Number of bytes to skip before starting to writestring.Default:0.
  • length<integer> Maximum number of bytes to write (written bytes will notexceedbuf.length - offset).Default:buf.length - offset.
  • encoding<string> The character encoding ofstring.Default:'utf8'.
  • Returns:<integer> Number of bytes written.

Writesstring tobuf atoffset according to the character encoding inencoding. Thelength parameter is the number of bytes to write. Ifbuf didnot contain enough space to fit the entire string, only part ofstring will bewritten. However, partially encoded characters will not be written.

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 : abconst {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])#

Added in: v12.0.0, v10.20.0
  • value<bigint> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian.

value is interpreted and written as a two's complement signed integer.

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>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])#

Added in: v12.0.0, v10.20.0
  • value<bigint> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian.

value is interpreted and written as a two's complement signed integer.

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>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])#

History
VersionChanges
v14.10.0, v12.19.0

This function is also available asbuf.writeBigUint64BE().

v12.0.0, v10.20.0

Added in: v12.0.0, v10.20.0

  • value<bigint> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian.

This function is also available under thewriteBigUint64BE alias.

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>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])#

History
VersionChanges
v14.10.0, v12.19.0

This function is also available asbuf.writeBigUint64LE().

v12.0.0, v10.20.0

Added in: v12.0.0, v10.20.0

  • value<bigint> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy:0 <= offset <= buf.length - 8.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian

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

This function is also available under thewriteBigUint64LE alias.

buf.writeDoubleBE(value[, offset])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • value<number> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 8.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian. Thevaluemust be a JavaScript number. Behavior is undefined whenvalue is anythingother than a JavaScript number.

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>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • value<number> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 8.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian. Thevaluemust be a JavaScript number. Behavior is undefined whenvalue is anythingother than a JavaScript number.

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>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • value<number> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian. Behavior isundefined whenvalue is anything other than a JavaScript number.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeFloatBE(0xcafebabe,0);console.log(buf);// Prints: <Buffer 4f 4a fe bb>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.11.15

Added in: v0.11.15

  • value<number> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian. Behavior isundefined whenvalue is anything other than a JavaScript number.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeFloatLE(0xcafebabe,0);console.log(buf);// Prints: <Buffer bb fe 4a 4f>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.0

Added in: v0.5.0

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 1.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset.value must be a validsigned 8-bit integer. Behavior is undefined whenvalue is anything other thana signed 8-bit integer.

value is interpreted and written as a two's complement signed integer.

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>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian. Thevaluemust be a valid signed 16-bit integer. Behavior is undefined whenvalue isanything other than a signed 16-bit integer.

Thevalue is interpreted and written as a two's complement signed integer.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(2);buf.writeInt16BE(0x0102,0);console.log(buf);// Prints: <Buffer 01 02>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian. Thevaluemust be a valid signed 16-bit integer. Behavior is undefined whenvalue isanything other than a signed 16-bit integer.

Thevalue is interpreted and written as a two's complement signed integer.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(2);buf.writeInt16LE(0x0304,0);console.log(buf);// Prints: <Buffer 04 03>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian. Thevaluemust be a valid signed 32-bit integer. Behavior is undefined whenvalue isanything other than a signed 32-bit integer.

Thevalue is interpreted and written as a two's complement signed integer.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeInt32BE(0x01020304,0);console.log(buf);// Prints: <Buffer 01 02 03 04>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])#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian. Thevaluemust be a valid signed 32-bit integer. Behavior is undefined whenvalue isanything other than a signed 32-bit integer.

Thevalue is interpreted and written as a two's complement signed integer.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeInt32LE(0x05060708,0);console.log(buf);// Prints: <Buffer 08 07 06 05>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)#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.11.15

Added in: v0.11.15

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to write. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>offset plus the number of bytes written.

WritesbyteLength bytes ofvalue tobuf at the specifiedoffsetas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined whenvalue is anything other than a signed integer.

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>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)#

History
VersionChanges
v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.11.15

Added in: v0.11.15

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to write. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>offset plus the number of bytes written.

WritesbyteLength bytes ofvalue tobuf at the specifiedoffsetas little-endian. Supports up to 48 bits of accuracy. Behavior is undefinedwhenvalue is anything other than a signed integer.

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>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])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUint8().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.0

Added in: v0.5.0

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 1.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset.value must be avalid unsigned 8-bit integer. Behavior is undefined whenvalue is anythingother than an unsigned 8-bit integer.

This function is also available under thewriteUint8 alias.

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>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])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUint16BE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian. Thevaluemust be a valid unsigned 16-bit integer. Behavior is undefined whenvalueis anything other than an unsigned 16-bit integer.

This function is also available under thewriteUint16BE alias.

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>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])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUint16LE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 2.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian. Thevaluemust be a valid unsigned 16-bit integer. Behavior is undefined whenvalue isanything other than an unsigned 16-bit integer.

This function is also available under thewriteUint16LE alias.

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>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])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUint32BE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as big-endian. Thevaluemust be a valid unsigned 32-bit integer. Behavior is undefined whenvalueis anything other than an unsigned 32-bit integer.

This function is also available under thewriteUint32BE alias.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeUInt32BE(0xfeedface,0);console.log(buf);// Prints: <Buffer fe ed fa ce>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])#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUint32LE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - 4.Default:0.
  • Returns:<integer>offset plus the number of bytes written.

Writesvalue tobuf at the specifiedoffset as little-endian. Thevaluemust be a valid unsigned 32-bit integer. Behavior is undefined whenvalue isanything other than an unsigned 32-bit integer.

This function is also available under thewriteUint32LE alias.

import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeUInt32LE(0xfeedface,0);console.log(buf);// Prints: <Buffer ce fa ed fe>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)#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUintBE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to write. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>offset plus the number of bytes written.

WritesbyteLength bytes ofvalue tobuf at the specifiedoffsetas big-endian. Supports up to 48 bits of accuracy. Behavior is undefinedwhenvalue is anything other than an unsigned integer.

This function is also available under thewriteUintBE alias.

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>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)#

History
VersionChanges
v14.9.0, v12.19.0

This function is also available asbuf.writeUintLE().

v10.0.0

RemovednoAssert and no implicit coercion of the offset andbyteLength touint32 anymore.

v0.5.5

Added in: v0.5.5

  • value<integer> Number to be written tobuf.
  • offset<integer> Number of bytes to skip before starting to write. Mustsatisfy0 <= offset <= buf.length - byteLength.
  • byteLength<integer> Number of bytes to write. Must satisfy0 < byteLength <= 6.
  • Returns:<integer>offset plus the number of bytes written.

WritesbyteLength bytes ofvalue tobuf at the specifiedoffsetas little-endian. Supports up to 48 bits of accuracy. Behavior is undefinedwhenvalue is anything other than an unsigned integer.

This function is also available under thewriteUintLE alias.

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>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)#

History
VersionChanges
v10.0.0

Calling this constructor emits a deprecation warning when run from code outside thenode_modules directory.

v7.2.1

Calling this constructor no longer emits a deprecation warning.

v7.0.0

Calling this constructor emits a deprecation warning now.

v6.0.0

Deprecated since: v6.0.0

Stability: 0 - Deprecated: UseBuffer.from(array) instead.

SeeBuffer.from(array).

new Buffer(arrayBuffer[, byteOffset[, length]])#

History
VersionChanges
v10.0.0

Calling this constructor emits a deprecation warning when run from code outside thenode_modules directory.

v7.2.1

Calling this constructor no longer emits a deprecation warning.

v7.0.0

Calling this constructor emits a deprecation warning now.

v6.0.0

ThebyteOffset andlength parameters are supported now.

v6.0.0

Deprecated since: v6.0.0

v3.0.0

Added in: v3.0.0

SeeBuffer.from(arrayBuffer[, byteOffset[, length]]).

new Buffer(buffer)#

History
VersionChanges
v10.0.0

Calling this constructor emits a deprecation warning when run from code outside thenode_modules directory.

v7.2.1

Calling this constructor no longer emits a deprecation warning.

v7.0.0

Calling this constructor emits a deprecation warning now.

v6.0.0

Deprecated since: v6.0.0

Stability: 0 - Deprecated: UseBuffer.from(buffer) instead.

SeeBuffer.from(buffer).

new Buffer(size)#

History
VersionChanges
v10.0.0

Calling this constructor emits a deprecation warning when run from code outside thenode_modules directory.

v8.0.0

Thenew Buffer(size) will return zero-filled memory by default.

v7.2.1

Calling this constructor no longer emits a deprecation warning.

v7.0.0

Calling this constructor emits a deprecation warning now.

v6.0.0

Deprecated since: v6.0.0

Stability: 0 - Deprecated: UseBuffer.alloc() instead (also seeBuffer.allocUnsafe()).

  • size<integer> The desired length of the newBuffer.

SeeBuffer.alloc() andBuffer.allocUnsafe(). This variant of theconstructor is equivalent toBuffer.alloc().

new Buffer(string[, encoding])#

History
VersionChanges
v10.0.0

Calling this constructor emits a deprecation warning when run from code outside thenode_modules directory.

v7.2.1

Calling this constructor no longer emits a deprecation warning.

v7.0.0

Calling this constructor emits a deprecation warning now.

v6.0.0

Deprecated since: v6.0.0

  • string<string> String to encode.
  • encoding<string> The encoding ofstring.Default:'utf8'.

SeeBuffer.from(string[, encoding]).

Class:File#

History
VersionChanges
v23.0.0

Makes File instances cloneable.

v20.0.0

No longer experimental.

v19.2.0, v18.13.0

Added in: v19.2.0, v18.13.0

A<File> provides information about files.

new buffer.File(sources, fileName[, options])#

Added in: v19.2.0, v18.13.0

file.name#

Added in: v19.2.0, v18.13.0

The name of theFile.

file.lastModified#

Added in: v19.2.0, v18.13.0

The last modified date of theFile.

node:buffer module APIs#

While, theBuffer object is available as a global, there are additionalBuffer-related APIs that are available only via thenode:buffer moduleaccessed usingrequire('node:buffer').

buffer.atob(data)#

Added in: v15.13.0, v14.17.0

Stability: 3 - Legacy. UseBuffer.from(data, 'base64') instead.

  • data<any> The Base64-encoded input string.

Decodes a string of Base64-encoded data into bytes, and encodes those bytesinto a string using Latin-1 (ISO-8859-1).

Thedata may be any JavaScript-value that can be coerced into a string.

This function is only provided for compatibility with legacy web platform APIsand should never be used in new code, because they use strings to representbinary data and predate the introduction of typed arrays in JavaScript.For code running using Node.js APIs, converting between base64-encoded stringsand binary data should be performed usingBuffer.from(str, 'base64') andbuf.toString('base64').

buffer.btoa(data)#

Added in: v15.13.0, v14.17.0

Stability: 3 - Legacy. Usebuf.toString('base64') instead.

  • data<any> An ASCII (Latin1) string.

Decodes a string into bytes using Latin-1 (ISO-8859), and encodes those bytesinto a string using Base64.

Thedata may be any JavaScript-value that can be coerced into a string.

This function is only provided for compatibility with legacy web platform APIsand should never be used in new code, because they use strings to representbinary data and predate the introduction of typed arrays in JavaScript.For code running using Node.js APIs, converting between base64-encoded stringsand binary data should be performed usingBuffer.from(str, 'base64') andbuf.toString('base64').

buffer.isAscii(input)#

Added in: v19.6.0, v18.15.0

This function returnstrue ifinput contains only valid ASCII-encoded data,including the case in whichinput is empty.

Throws if theinput is a detached array buffer.

buffer.isUtf8(input)#

Added in: v19.4.0, v18.14.0

This function returnstrue ifinput contains only valid UTF-8-encoded data,including the case in whichinput is empty.

Throws if theinput is a detached array buffer.

buffer.INSPECT_MAX_BYTES#

Added in: v0.5.4

Returns the maximum number of bytes that will be returned whenbuf.inspect() is called. This can be overridden by user modules. Seeutil.inspect() for more details onbuf.inspect() behavior.

buffer.kMaxLength#

Added in: v3.0.0
  • <integer> The largest size allowed for a singleBuffer instance.

An alias forbuffer.constants.MAX_LENGTH.

buffer.kStringMaxLength#

Added in: v3.0.0
  • <integer> The largest length allowed for a singlestring instance.

An alias forbuffer.constants.MAX_STRING_LENGTH.

buffer.resolveObjectURL(id)#

History
VersionChanges
v24.0.0

Marking the API stable.

v16.7.0

Added in: v16.7.0

  • id<string> A'blob:nodedata:... URL string returned by a prior call toURL.createObjectURL().
  • Returns:<Blob>

Resolves a'blob:nodedata:...' an associated<Blob> object registered usinga prior call toURL.createObjectURL().

buffer.transcode(source, fromEnc, toEnc)#

History
VersionChanges
v8.0.0

Thesource parameter can now be aUint8Array.

v7.1.0

Added in: v7.1.0

Re-encodes the givenBuffer orUint8Array instance from one characterencoding to another. Returns a newBuffer instance.

Throws if thefromEnc ortoEnc specify invalid character encodings or ifconversion fromfromEnc totoEnc is not permitted.

Encodings supported bybuffer.transcode() are:'ascii','utf8','utf16le','ucs2','latin1', and'binary'.

The transcoding process will use substitution characters if a given bytesequence cannot be adequately represented in the target encoding. For instance:

import {Buffer, transcode }from'node:buffer';const newBuf =transcode(Buffer.from('€'),'utf8','ascii');console.log(newBuf.toString('ascii'));// Prints: '?'const {Buffer, transcode } =require('node:buffer');const newBuf =transcode(Buffer.from('€'),'utf8','ascii');console.log(newBuf.toString('ascii'));// Prints: '?'

Because the Euro () sign is not representable in US-ASCII, it is replacedwith? in the transcodedBuffer.

Class:SlowBuffer#

Deprecated since: v6.0.0

Stability: 0 - Deprecated: UseBuffer.allocUnsafeSlow() instead.

SeeBuffer.allocUnsafeSlow(). This was never a class in the sense thatthe constructor always returned aBuffer instance, rather than aSlowBufferinstance.

new SlowBuffer(size)#
Deprecated since: v6.0.0
  • size<integer> The desired length of the newSlowBuffer.

SeeBuffer.allocUnsafeSlow().

Buffer constants#

Added in: v8.2.0
buffer.constants.MAX_LENGTH#
History
VersionChanges
v22.0.0

Value is changed to 253 - 1 on 64-bit architectures.

v15.0.0

Value is changed to 232 on 64-bit architectures.

v14.0.0

Value is changed from 231 - 1 to 232 - 1 on 64-bit architectures.

v8.2.0

Added in: v8.2.0

  • <integer> The largest size allowed for a singleBuffer instance.

On 32-bit architectures, this value currently is 230 - 1 (about 1GiB).

On 64-bit architectures, this value currently is 253 - 1 (about 8 PiB).

It reflectsv8::TypedArray::kMaxLength under the hood.

This value is also available asbuffer.kMaxLength.

buffer.constants.MAX_STRING_LENGTH#
Added in: v8.2.0
  • <integer> The largest length allowed for a singlestring instance.

Represents the largestlength that astring primitive can have, countedin UTF-16 code units.

This value may depend on the JS engine that is being used.

Buffer.from(),Buffer.alloc(), andBuffer.allocUnsafe()#

In versions of Node.js prior to 6.0.0,Buffer instances were created using theBuffer constructor function, which allocates the returnedBufferdifferently based on what arguments are provided:

  • Passing a number as the first argument toBuffer() (e.g.new Buffer(10))allocates a newBuffer object of the specified size. Prior to Node.js 8.0.0,the memory allocated for suchBuffer instances isnot initialized andcan contain sensitive data. SuchBuffer instancesmust be subsequentlyinitialized by using eitherbuf.fill(0) or by writing to theentireBuffer before reading data from theBuffer.While this behavior isintentional to improve performance,development experience has demonstrated that a more explicit distinction isrequired between creating a fast-but-uninitializedBuffer versus creating aslower-but-saferBuffer. Since Node.js 8.0.0,Buffer(num) andnew Buffer(num) return aBuffer with initialized memory.
  • Passing a string, array, orBuffer as the first argument copies thepassed object's data into theBuffer.
  • Passing an<ArrayBuffer> or a<SharedArrayBuffer> returns aBufferthat shares allocated memory with the given array buffer.

Because the behavior ofnew Buffer() is different depending on the type of thefirst argument, security and reliability issues can be inadvertently introducedinto applications when argument validation orBuffer initialization is notperformed.

For example, if an attacker can cause an application to receive a number wherea string is expected, the application may callnew Buffer(100)instead ofnew Buffer("100"), leading it to allocate a 100 byte buffer insteadof allocating a 3 byte buffer with content"100". This is commonly possibleusing JSON API calls. Since JSON distinguishes between numeric and string types,it allows injection of numbers where a naively written application that does notvalidate its input sufficiently might expect to always receive a string.Before Node.js 8.0.0, the 100 byte buffer might containarbitrary pre-existing in-memory data, so may be used to expose in-memorysecrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannotoccur because the data is zero-filled. However, other attacks are stillpossible, such as causing very large buffers to be allocated by the server,leading to performance degradation or crashing on memory exhaustion.

To make the creation ofBuffer instances more reliable and less error-prone,the various forms of thenew Buffer() constructor have beendeprecatedand replaced by separateBuffer.from(),Buffer.alloc(), andBuffer.allocUnsafe() methods.

Developers should migrate all existing uses of thenew Buffer() constructorsto one of these new APIs.

Buffer instances returned byBuffer.allocUnsafe(),Buffer.from(string),Buffer.concat() andBuffer.from(array)may be allocated off a sharedinternal memory pool ifsize is less than or equal to halfBuffer.poolSize.Instances returned byBuffer.allocUnsafeSlow()never use the shared internalmemory pool.

The--zero-fill-buffers command-line option#

Added in: v5.10.0

Node.js can be started using the--zero-fill-buffers command-line option tocause all newly-allocatedBuffer instances to be zero-filled upon creation bydefault. Without the option, buffers created withBuffer.allocUnsafe(),Buffer.allocUnsafeSlow(), andnew SlowBuffer(size) are not zero-filled.Use of this flag can have a measurable negative impact on performance. Use the--zero-fill-buffers option only when necessary to enforce that newly allocatedBuffer instances cannot contain old data that is potentially sensitive.

$node --zero-fill-buffers>Buffer.allocUnsafe(5);<Buffer 00 00 00 00 00>

What makesBuffer.allocUnsafe() andBuffer.allocUnsafeSlow() "unsafe"?#

When callingBuffer.allocUnsafe() andBuffer.allocUnsafeSlow(), thesegment of allocated memory isuninitialized (it is not zeroed-out). Whilethis design makes the allocation of memory quite fast, the allocated segment ofmemory might contain old data that is potentially sensitive. Using aBuffercreated byBuffer.allocUnsafe() withoutcompletely overwriting thememory can allow this old data to be leaked when theBuffer memory is read.

While there are clear performance advantages to usingBuffer.allocUnsafe(), extra caremust be taken in order to avoidintroducing security vulnerabilities into an application.