Buffer#
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
| Version | Changes |
|---|---|
| v15.7.0, v14.18.0 | Introduced |
| v6.4.0 | Introduced |
| v5.0.0 | Removed the deprecated |
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 aBufferinto 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+0000toU+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 aBufferfrom 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 aBufferfrom a string, thisencoding will also correctly accept regular base64-encoded strings. Whenencoding aBufferto 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
| Version | Changes |
|---|---|
| v3.0.0 | The |
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:
- While
TypedArray.prototype.slice()creates a copy of part of theTypedArray,Buffer.prototype.slice()creates a view over the existingBufferwithout copying. This behavior can be surprising, and only exists for legacycompatibility.TypedArray.prototype.subarray()can be used to achievethe behavior ofBuffer.prototype.slice()on bothBuffersand otherTypedArrays and should be preferred. buf.toString()is incompatible with itsTypedArrayequivalent.- A number of methods, e.g.
buf.indexOf(), support additional arguments.
There are two ways to create new<TypedArray> instances from aBuffer:
- Passing a
Bufferto 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 ]
- Passing the
Buffer's underlying<ArrayBuffer> will create a<TypedArray> that shares its memory with theBuffer.
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:
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
| Version | Changes |
|---|---|
| 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
| Version | Changes |
|---|---|
| v16.7.0 | Added the standard |
| v15.7.0, v14.18.0 | Added in: v15.7.0, v14.18.0 |
sources<string[]> |<ArrayBuffer[]> |<TypedArray[]> |<DataView[]> |<Blob[]> Anarray of string,<ArrayBuffer>,<TypedArray>,<DataView>, or<Blob> objects,or any mix of such objects, that will be stored within theBlob.options<Object>endings<string> One of either'transparent'or'native'. When setto'native', line endings in string source parts will be converted tothe platform native line-ending as specified byrequire('node:os').EOL.type<string> The Blob content-type. The intent is fortypeto conveythe MIME media type of the data, however no validation of the type formatis performed.
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()#
- Returns:<Promise>
Returns a promise that fulfills with an<ArrayBuffer> containing a copy oftheBlob data.
blob.bytes()#
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.slice([start[, end[, type]]])#
start<number> The starting index.end<number> The ending index.type<string> The content-type for the newBlob
Creates and returns a newBlob containing a subset of thisBlob objectsdata. The originalBlob is not altered.
blob.stream()#
- Returns:<ReadableStream>
Returns a newReadableStream that allows the content of theBlob to be read.
blob.text()#
- Returns:<Promise>
Returns a promise that fulfills with the contents of theBlob decoded as aUTF-8 string.
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
| Version | Changes |
|---|---|
| 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 for |
| v8.9.3 | Specifying an invalid string for |
| v5.10.0 | Added in: v5.10.0 |
size<integer> The desired length of the newBuffer.fill<string> |<Buffer> |<Uint8Array> |<integer> A value to pre-fill the newBufferwith.Default:0.encoding<string> Iffillis a string, this is its encoding.Default:'utf8'.- Returns:<Buffer>
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
| Version | Changes |
|---|---|
| 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 negative |
| 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
| Version | Changes |
|---|---|
| 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
| Version | Changes |
|---|---|
| v7.0.0 | Passing invalid input will now throw an error. |
| v5.10.0 | The |
| v0.1.90 | Added in: v0.1.90 |
string<string> |<Buffer> |<TypedArray> |<DataView> |<ArrayBuffer> |<SharedArrayBuffer> Avalue to calculate the length of.encoding<string> Ifstringis a string, this is its encoding.Default:'utf8'.- Returns:<integer> The number of bytes contained within
string.
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
| Version | Changes |
|---|---|
| v8.0.0 | The arguments can now be |
| v0.11.13 | Added in: v0.11.13 |
buf1<Buffer> |<Uint8Array>buf2<Buffer> |<Uint8Array>- Returns:<integer> Either
-1,0, or1, depending on the result of thecomparison. Seebuf.compare()for details.
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
| Version | Changes |
|---|---|
| v8.0.0 | The elements of |
| v0.7.11 | Added in: v0.7.11 |
list<Buffer[]> |<Uint8Array[]> List ofBufferor<Uint8Array>instances to concatenate.totalLength<integer> Total length of theBufferinstances inlistwhen concatenated.- Returns:<Buffer>
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]])#
view<TypedArray> The<TypedArray> to copy.offset<integer> The starting offset withinview.Default:0.length<integer> The number of elements fromviewto copy.Default:view.length - offset.- Returns:<Buffer>
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]);// 255Static method:Buffer.from(array)#
array<integer[]>- Returns:<Buffer>
Allocates a newBuffer using anarray of bytes in the range0 –255.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]])#
arrayBuffer<ArrayBuffer> |<SharedArrayBuffer> An<ArrayBuffer>,<SharedArrayBuffer>, for example the.bufferproperty of a<TypedArray>.byteOffset<integer> Index of first byte to expose.Default:0.length<integer> Number of bytes to expose.Default:arrayBuffer.byteLength - byteOffset.- Returns:<Buffer>
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)#
buffer<Buffer> |<Uint8Array> An existingBufferor<Uint8Array> fromwhich to copy data.- Returns:<Buffer>
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]])#
object<Object> An object supportingSymbol.toPrimitiveorvalueOf().offsetOrEncoding<integer> |<string> A byte-offset or encoding.length<integer> A length.- Returns:<Buffer>
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])#
string<string> A string to encode.encoding<string> The encoding ofstring.Default:'utf8'.- Returns:<Buffer>
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)#
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)#
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
Buffer.poolSize#
- Type:<integer>Default:
8192
This is the size (in bytes) of pre-allocated internalBuffer instances usedfor pooling. This value may be modified.
buf[index]#
index<integer>
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#
- Type:<ArrayBuffer> The underlying
ArrayBufferobject 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#
- Type:<integer> The
byteOffsetof theBuffer's underlyingArrayBufferobject.
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
| Version | Changes |
|---|---|
| v8.0.0 | The |
| v5.11.0 | Additional parameters for specifying offsets are supported now. |
| v0.11.13 | Added in: v0.11.13 |
target<Buffer> |<Uint8Array> ABufferor<Uint8Array> with which tocomparebuf.targetStart<integer> The offset withintargetat which to begincomparison.Default:0.targetEnd<integer> The offset withintargetat which to end comparison(not inclusive).Default:target.length.sourceStart<integer> The offset withinbufat which to begin comparison.Default:0.sourceEnd<integer> The offset withinbufat 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.
0is returned iftargetis the same asbuf1is returned iftargetshould comebeforebufwhen sorted.-1is returned iftargetshould comeafterbufwhen 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]]])#
target<Buffer> |<Uint8Array> ABufferor<Uint8Array> to copy into.targetStart<integer> The offset withintargetat which to beginwriting.Default:0.sourceStart<integer> The offset withinbuffrom which to begin copying.Default:0.sourceEnd<integer> The offset withinbufat which to stop copying (notinclusive).Default:buf.length.- Returns:<integer> The number of bytes copied.
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()#
- Returns:<Iterator>
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
| Version | Changes |
|---|---|
| v8.0.0 | The arguments can now be |
| v0.11.13 | Added in: v0.11.13 |
otherBuffer<Buffer> |<Uint8Array> ABufferor<Uint8Array> with which tocomparebuf.- Returns:<boolean>
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
| Version | Changes |
|---|---|
| v11.0.0 | Throws |
| v10.0.0 | Negative |
| 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 for |
| v5.7.0 | The |
| v0.5.0 | Added in: v0.5.0 |
value<string> |<Buffer> |<Uint8Array> |<integer> The value with which to fillbuf.Empty value (string, Uint8Array, Buffer) is coerced to0.offset<integer> Number of bytes to skip before starting to fillbuf.Default:0.end<integer> Where to stop fillingbuf(not inclusive).Default:buf.length.encoding<string> The encoding forvalueifvalueis a string.Default:'utf8'.- Returns:<Buffer> A reference to
buf.
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])#
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> Ifvalueis a string, this is its encoding.Default:'utf8'.- Returns:<boolean>
trueifvaluewas found inbuf,falseotherwise.
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
| Version | Changes |
|---|---|
| v8.0.0 | The |
| v5.7.0, v4.4.0 | When |
| 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> Ifvalueis 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 of
valueinbuf, or-1ifbufdoes not containvalue.
Ifvalue is:
- a string,
valueis interpreted according to the character encoding inencoding. - a
Bufferor<Uint8Array>,valuewill be used in its entirety.To compare a partialBuffer, usebuf.subarray. - a number,
valuewill be interpreted as an unsigned 8-bit integervalue between0and255.
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()#
- Returns:<Iterator>
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
| Version | Changes |
|---|---|
| v8.0.0 | The |
| 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> Ifvalueis 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 of
valueinbuf, or-1ifbufdoes 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#
- Type:<integer>
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#
buf.buffer instead.Thebuf.parent property is a deprecated alias forbuf.buffer.
buf.readBigInt64BE([offset])#
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])#
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
| Version | Changes |
|---|---|
| v14.10.0, v12.19.0 | This function is also available as |
| 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
| Version | Changes |
|---|---|
| v14.10.0, v12.19.0 | This function is also available as |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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]])#
start<integer> Where the newBufferwill start.Default:0.end<integer> Where the newBufferwill end (not inclusive).Default:buf.length.- Returns:<Buffer>
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
| Version | Changes |
|---|---|
| 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 |
start<integer> Where the newBufferwill start.Default:0.end<integer> Where the newBufferwill end (not inclusive).Default:buf.length.- Returns:<Buffer>
buf.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()#
- Returns:<Buffer> A reference to
buf.
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()#
- Returns:<Buffer> A reference to
buf.
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()#
- Returns:<Buffer> A reference to
buf.
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()#
- Returns:<Object>
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]]])#
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()#
- Returns:<Iterator>
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])#
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])#
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>
offsetplus 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])#
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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.10.0, v12.19.0 | This function is also available as |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.10.0, v12.19.0 | This function is also available as |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v14.9.0, v12.19.0 | This function is also available as |
| v10.0.0 | Removed |
| 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>
offsetplus 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
| Version | Changes |
|---|---|
| v10.0.0 | Calling this constructor emits a deprecation warning when run from code outside the |
| 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 |
Buffer.from(array) instead.array<integer[]> An array of bytes to copy from.
new Buffer(arrayBuffer[, byteOffset[, length]])#
History
| Version | Changes |
|---|---|
| v10.0.0 | Calling this constructor emits a deprecation warning when run from code outside the |
| 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 | The |
| v6.0.0 | Deprecated since: v6.0.0 |
| v3.0.0 | Added in: v3.0.0 |
Buffer.from(arrayBuffer[, byteOffset[, length]])instead.arrayBuffer<ArrayBuffer> |<SharedArrayBuffer> An<ArrayBuffer>,<SharedArrayBuffer> or the.bufferproperty of a<TypedArray>.byteOffset<integer> Index of first byte to expose.Default:0.length<integer> Number of bytes to expose.Default:arrayBuffer.byteLength - byteOffset.
new Buffer(buffer)#
History
| Version | Changes |
|---|---|
| v10.0.0 | Calling this constructor emits a deprecation warning when run from code outside the |
| 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 |
Buffer.from(buffer) instead.buffer<Buffer> |<Uint8Array> An existingBufferor<Uint8Array> fromwhich to copy data.
new Buffer(size)#
History
| Version | Changes |
|---|---|
| v10.0.0 | Calling this constructor emits a deprecation warning when run from code outside the |
| v8.0.0 | The |
| 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 |
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
| Version | Changes |
|---|---|
| v10.0.0 | Calling this constructor emits a deprecation warning when run from code outside the |
| 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 |
Buffer.from(string[, encoding]) instead.Class:File#
History
| Version | Changes |
|---|---|
| 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 |
- Extends:<Blob>
A<File> provides information about files.
new buffer.File(sources, fileName[, options])#
sources<string[]> |<ArrayBuffer[]> |<TypedArray[]> |<DataView[]> |<Blob[]> |<File[]>An array of string,<ArrayBuffer>,<TypedArray>,<DataView>,<File>, or<Blob>objects, or any mix of such objects, that will be stored within theFile.fileName<string> The name of the file.options<Object>endings<string> One of either'transparent'or'native'. When setto'native', line endings in string source parts will be converted tothe platform native line-ending as specified byrequire('node:os').EOL.type<string> The File content-type.lastModified<number> The last modified date of the file.Default:Date.now().
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)#
Buffer.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)#
buf.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)#
input<Buffer> |<ArrayBuffer> |<TypedArray> The input to validate.- Returns:<boolean>
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)#
input<Buffer> |<ArrayBuffer> |<TypedArray> The input to validate.- Returns:<boolean>
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#
- Type:<integer>Default:
50
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#
- Type:<integer> The largest size allowed for a single
Bufferinstance.
An alias forbuffer.constants.MAX_LENGTH.
buffer.kStringMaxLength#
- Type:<integer> The largest length allowed for a single
stringinstance.
An alias forbuffer.constants.MAX_STRING_LENGTH.
buffer.resolveObjectURL(id)#
History
| Version | Changes |
|---|---|
| v24.0.0, v22.17.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
| Version | Changes |
|---|---|
| v8.0.0 | The |
| v7.1.0 | Added in: v7.1.0 |
source<Buffer> |<Uint8Array> ABufferorUint8Arrayinstance.fromEnc<string> The current encoding.toEnc<string> To target encoding.- Returns:<Buffer>
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.
Buffer constants#
buffer.constants.MAX_LENGTH#
History
| Version | Changes |
|---|---|
| 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 |
- Type:<integer> The largest size allowed for a single
Bufferinstance.
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.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 to
Buffer()(e.g.new Buffer(10))allocates a newBufferobject of the specified size. Prior to Node.js 8.0.0,the memory allocated for suchBufferinstances isnot initialized andcan contain sensitive data. SuchBufferinstancesmust be subsequentlyinitialized by using eitherbuf.fill(0)or by writing to theentireBufferbefore 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-uninitializedBufferversus creating aslower-but-saferBuffer. Since Node.js 8.0.0,Buffer(num)andnew Buffer(num)return aBufferwith initialized memory. - Passing a string, array, or
Bufferas the first argument copies thepassed object's data into theBuffer. - Passing an<ArrayBuffer> or a<SharedArrayBuffer> returns a
Bufferthat 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.from(array)returns a newBufferthatcontains a copy of theprovided octets.Buffer.from(arrayBuffer[, byteOffset[, length]])returns a newBufferthatshares the same allocated memory as the given<ArrayBuffer>.Buffer.from(buffer)returns a newBufferthatcontains a copy of thecontents of the givenBuffer.Buffer.from(string[, encoding])returns a newBufferthatcontains a copy of the provided string.Buffer.alloc(size[, fill[, encoding]])returns a newinitializedBufferof the specified size. This method is slower thanBuffer.allocUnsafe(size)but guarantees that newlycreatedBufferinstances never contain old data that is potentiallysensitive. ATypeErrorwill be thrown ifsizeis not a number.Buffer.allocUnsafe(size)andBuffer.allocUnsafeSlow(size)each return anew uninitializedBufferof the specifiedsize. Because theBufferisuninitialized, the allocated segment of memory might contain old data that ispotentially sensitive.
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#
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() andBuffer.allocUnsafeSlow() are not zero-filled. Use of this flag can have ameasurable negative impact on performance. Use the--zero-fill-buffers optiononly when necessary to enforce that newly allocatedBuffer instances cannotcontain 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.