Buffer#
Source Code:lib/buffer.js
Buffer
objects are used to represent a fixed-length sequence of bytes. ManyNode.js APIs supportBuffer
s.
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 whereverBuffer
s 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 betweenBuffer
s and strings, a character encoding may bespecified. If no character encoding is specified, UTF-8 will be used as thedefault.
import {Buffer }from'node:buffer';const buf =Buffer.from('hello world','utf8');console.log(buf.toString('hex'));// Prints: 68656c6c6f20776f726c64console.log(buf.toString('base64'));// Prints: aGVsbG8gd29ybGQ=console.log(Buffer.from('fhqwhgads','utf8'));// Prints: <Buffer 66 68 71 77 68 67 61 64 73>console.log(Buffer.from('fhqwhgads','utf16le'));// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>
const {Buffer } =require('node:buffer');const buf =Buffer.from('hello world','utf8');console.log(buf.toString('hex'));// Prints: 68656c6c6f20776f726c64console.log(buf.toString('base64'));// Prints: aGVsbG8gd29ybGQ=console.log(Buffer.from('fhqwhgads','utf8'));// Prints: <Buffer 66 68 71 77 68 67 61 64 73>console.log(Buffer.from('fhqwhgads','utf16le'));// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>
Node.js buffers accept all case variations of encoding strings that theyreceive. For example, UTF-8 can be specified as'utf8'
,'UTF8'
, or'uTf8'
.
The character encodings currently supported by Node.js are the following:
'utf8'
(alias:'utf-8'
): Multi-byte encoded Unicode characters. Many webpages and other document formats useUTF-8. This is the default characterencoding. When decoding aBuffer
into a string that does not exclusivelycontain valid UTF-8 data, the Unicode replacement characterU+FFFD
� will beused to represent those errors.'utf16le'
(alias:'utf-16le'
): Multi-byte encoded Unicode characters.Unlike'utf8'
, each character in the string will be encoded using either 2or 4 bytes. Node.js only supports thelittle-endian variant ofUTF-16.'latin1'
: Latin-1 stands forISO-8859-1. This character encoding onlysupports the Unicode characters fromU+0000
toU+00FF
. Each character isencoded using a single byte. Characters that do not fit into that range aretruncated and will be mapped to characters in that range.
Converting aBuffer
into a string using one of the above is referred to asdecoding, and converting a string into aBuffer
is referred to as encoding.
Node.js also supports the following binary-to-text encodings. Forbinary-to-text encodings, the naming convention is reversed: Converting aBuffer
into a string is typically referred to as encoding, and converting astring into aBuffer
as decoding.
'base64'
:Base64 encoding. When creating aBuffer
from a string,this encoding will also correctly accept "URL and Filename Safe Alphabet" asspecified inRFC 4648, Section 5. Whitespace characters such as spaces,tabs, and new lines contained within the base64-encoded string are ignored.'base64url'
:base64url encoding as specified inRFC 4648, Section 5. When creating aBuffer
from a string, thisencoding will also correctly accept regular base64-encoded strings. Whenencoding aBuffer
to a string, this encoding will omit padding.'hex'
: Encode each byte as two hexadecimal characters. Data truncationmay occur when decoding strings that do not exclusively consist of an evennumber of hexadecimal characters. See below for an example.
The following legacy character encodings are also supported:
'ascii'
: For 7-bitASCII data only. When encoding a string into aBuffer
, this is equivalent to using'latin1'
. When decoding aBuffer
into 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 andBuffer
s, 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 onBuffer
s. 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 existingBuffer
without copying. This behavior can be surprising, and only exists for legacycompatibility.TypedArray.prototype.subarray()
can be used to achievethe behavior ofBuffer.prototype.slice()
on bothBuffer
sand otherTypedArray
s and should be preferred. buf.toString()
is incompatible with itsTypedArray
equivalent.- A number of methods, e.g.
buf.indexOf()
, support additional arguments.
There are two ways to create new<TypedArray> instances from aBuffer
:
- Passing a
Buffer
to a<TypedArray> constructor will copy theBuffer
'scontents, interpreted as an array of integers, and not as a byte sequenceof the target type.
import {Buffer }from'node:buffer';const buf =Buffer.from([1,2,3,4]);const uint32array =newUint32Array(buf);console.log(uint32array);// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]
const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3,4]);const uint32array =newUint32Array(buf);console.log(uint32array);// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]
- 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: 16
const {Buffer } =require('node:buffer');const arr =newUint16Array(20);const buf =Buffer.from(arr.buffer,0,16);console.log(buf.length);// Prints: 16
TheBuffer.from()
andTypedArray.from()
have different signatures andimplementations. Specifically, the<TypedArray> variants accept a secondargument that is a mapping function that is invoked on every element of thetyped array:
TypedArray.from(source[, mapFn[, thisArg]])
TheBuffer.from()
method, however, does not support the use of a mappingfunction:
Buffers and iteration#
Buffer
instances can be iterated over usingfor..of
syntax:
import {Buffer }from'node:buffer';const buf =Buffer.from([1,2,3]);for (const bof buf) {console.log(b);}// Prints:// 1// 2// 3
const {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 fortype
to 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 newBuffer
with.Default:0
.encoding
<string> Iffill
is 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_RANGE
is 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 forBuffer
s.
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_RANGE
is 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 internalBuffer
pool, 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_RANGE
is 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 allocatedBuffer
instances. 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> Ifstring
is 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 bytes
const {Buffer } =require('node:buffer');const str ='\u00bd + \u00bc = \u00be';console.log(`${str}:${str.length} characters, ` +`${Buffer.byteLength(str,'utf8')} bytes`);// Prints: ½ + ¼ = ¾: 9 characters, 12 bytes
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 ofBuffer
or<Uint8Array>instances to concatenate.totalLength
<integer> Total length of theBuffer
instances inlist
when concatenated.- Returns:<Buffer>
Returns a newBuffer
which is the result of concatenating all theBuffer
instances 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 theBuffer
s inlist
exceedstotalLength
, the result istruncated tototalLength
. If the combined length of theBuffer
s 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: 42
const {Buffer } =require('node:buffer');// Create a single `Buffer` from a list of three `Buffer` instances.const buf1 =Buffer.alloc(10);const buf2 =Buffer.alloc(14);const buf3 =Buffer.alloc(18);const totalLength = buf1.length + buf2.length + buf3.length;console.log(totalLength);// Prints: 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 fromview
to 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]);// 255
Static 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.buffer
property 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: 2
const {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 existingBuffer
or<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: buffer
const {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.toPrimitive
orvalueOf()
.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ést
const {Buffer } =require('node:buffer');const buf1 =Buffer.from('this is a tést');const buf2 =Buffer.from('7468697320697320612074c3a97374','hex');console.log(buf1.toString());// Prints: this is a té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));// false
const {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: false
const {Buffer } =require('node:buffer');console.log(Buffer.isEncoding('utf8'));// Prints: trueconsole.log(Buffer.isEncoding('hex'));// Prints: trueconsole.log(Buffer.isEncoding('utf/8'));// Prints: falseconsole.log(Buffer.isEncoding(''));// Prints: false
Class property:Buffer.poolSize
#
- <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.js
const {Buffer } =require('node:buffer');// Copy an ASCII string into a `Buffer` one byte at a time.// (This only works for ASCII-only strings. In general, one should use// `Buffer.from()` to perform this conversion.)const str ='Node.js';const buf =Buffer.allocUnsafe(str.length);for (let i =0; i < str.length; i++) { buf[i] = str.charCodeAt(i);}console.log(buf.toString('utf8'));// Prints: Node.js
buf.buffer
#
- <ArrayBuffer> The underlying
ArrayBuffer
object based on which thisBuffer
object 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: true
const {Buffer } =require('node:buffer');const arrayBuffer =newArrayBuffer(16);const buffer =Buffer.from(arrayBuffer);console.log(buffer.buffer === arrayBuffer);// Prints: true
buf.byteOffset
#
- <integer> The
byteOffset
of theBuffer
's underlyingArrayBuffer
object.
When settingbyteOffset
inBuffer.from(ArrayBuffer, byteOffset, length)
,or sometimes when allocating aBuffer
smaller thanBuffer.poolSize
, thebuffer does not start from a zero offset on the underlyingArrayBuffer
.
This can cause problems when accessing the underlyingArrayBuffer
directlyusingbuf.buffer
, as other parts of theArrayBuffer
may be unrelatedto theBuffer
object itself.
A common issue when creating aTypedArray
object that shares its memory withaBuffer
is that in this case one needs to specify thebyteOffset
correctly:
import {Buffer }from'node:buffer';// Create a buffer smaller than `Buffer.poolSize`.const nodeBuffer =Buffer.from([0,1,2,3,4,5,6,7,8,9]);// When casting the Node.js Buffer to an Int8Array, use the byteOffset// to refer only to the part of `nodeBuffer.buffer` that contains the memory// for `nodeBuffer`.newInt8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);
const {Buffer } =require('node:buffer');// Create a buffer smaller than `Buffer.poolSize`.const nodeBuffer =Buffer.from([0,1,2,3,4,5,6,7,8,9]);// When casting the Node.js Buffer to an Int8Array, use the byteOffset// to refer only to the part of `nodeBuffer.buffer` that contains the memory// for `nodeBuffer`.newInt8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);
buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
#
History
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> ABuffer
or<Uint8Array> with which tocomparebuf
.targetStart
<integer> The offset withintarget
at which to begincomparison.Default:0
.targetEnd
<integer> The offset withintarget
at which to end comparison(not inclusive).Default:target.length
.sourceStart
<integer> The offset withinbuf
at which to begin comparison.Default:0
.sourceEnd
<integer> The offset withinbuf
at which to end comparison(not inclusive).Default:buf.length
.- Returns:<integer>
Comparesbuf
withtarget
and returns a number indicating whetherbuf
comes before, after, or is the same astarget
in sort order.Comparison is based on the actual sequence of bytes in eachBuffer
.
0
is returned iftarget
is the same asbuf
1
is returned iftarget
should comebeforebuf
when sorted.-1
is returned iftarget
should comeafterbuf
when sorted.
import {Buffer }from'node:buffer';const buf1 =Buffer.from('ABC');const buf2 =Buffer.from('BCD');const buf3 =Buffer.from('ABCD');console.log(buf1.compare(buf1));// Prints: 0console.log(buf1.compare(buf2));// Prints: -1console.log(buf1.compare(buf3));// Prints: -1console.log(buf2.compare(buf1));// Prints: 1console.log(buf2.compare(buf3));// Prints: 1console.log([buf1, buf2, buf3].sort(Buffer.compare));// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]// (This result is equal to: [buf1, buf3, buf2].)
const {Buffer } =require('node:buffer');const buf1 =Buffer.from('ABC');const buf2 =Buffer.from('BCD');const buf3 =Buffer.from('ABCD');console.log(buf1.compare(buf1));// Prints: 0console.log(buf1.compare(buf2));// Prints: -1console.log(buf1.compare(buf3));// Prints: -1console.log(buf2.compare(buf1));// Prints: 1console.log(buf2.compare(buf3));// Prints: 1console.log([buf1, buf2, buf3].sort(Buffer.compare));// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]// (This result is equal to: [buf1, buf3, buf2].)
The optionaltargetStart
,targetEnd
,sourceStart
, andsourceEnd
arguments can be used to limit the comparison to specific ranges withintarget
andbuf
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: 1
const {Buffer } =require('node:buffer');const buf1 =Buffer.from([1,2,3,4,5,6,7,8,9]);const buf2 =Buffer.from([5,6,7,8,9,1,2,3,4]);console.log(buf1.compare(buf2,5,9,0,4));// Prints: 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> ABuffer
or<Uint8Array> to copy into.targetStart
<integer> The offset withintarget
at which to beginwriting.Default:0
.sourceStart
<integer> The offset withinbuf
from which to begin copying.Default:0
.sourceEnd
<integer> The offset withinbuf
at 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 thetarget
memory region overlaps withbuf
.
TypedArray.prototype.set()
performs the same operation, and is availablefor all TypedArrays, including Node.jsBuffer
s, 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: efghijghijklmnopqrstuvwxyz
const {Buffer } =require('node:buffer');// Create a `Buffer` and copy data from one region to an overlapping region// within the same `Buffer`.const buf =Buffer.allocUnsafe(26);for (let i =0; i <26; i++) {// 97 is the decimal ASCII value for 'a'. buf[i] = i +97;}buf.copy(buf,0,4,10);console.log(buf.toString());// Prints: efghijghijklmnopqrstuvwxyz
buf.entries()
#
- 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> ABuffer
or<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: false
const {Buffer } =require('node:buffer');const buf1 =Buffer.from('ABC');const buf2 =Buffer.from('414243','hex');const buf3 =Buffer.from('ABCD');console.log(buf1.equals(buf2));// Prints: 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 forvalue
ifvalue
is 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> Ifvalue
is a string, this is its encoding.Default:'utf8'
.- Returns:<boolean>
true
ifvalue
was found inbuf
,false
otherwise.
Equivalent tobuf.indexOf() !== -1
.
import {Buffer }from'node:buffer';const buf =Buffer.from('this is a buffer');console.log(buf.includes('this'));// Prints: trueconsole.log(buf.includes('is'));// Prints: trueconsole.log(buf.includes(Buffer.from('a buffer')));// Prints: trueconsole.log(buf.includes(97));// Prints: true (97 is the decimal ASCII value for 'a')console.log(buf.includes(Buffer.from('a buffer example')));// Prints: falseconsole.log(buf.includes(Buffer.from('a buffer example').slice(0,8)));// Prints: trueconsole.log(buf.includes('this',4));// Prints: false
const {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> Ifvalue
is a string, this is the encoding used todetermine the binary representation of the string that will be searched for inbuf
.Default:'utf8'
.- Returns:<integer> The index of the first occurrence of
value
inbuf
, or-1
ifbuf
does not containvalue
.
Ifvalue
is:
- a string,
value
is interpreted according to the character encoding inencoding
. - a
Buffer
or<Uint8Array>,value
will be used in its entirety.To compare a partialBuffer
, usebuf.subarray
. - a number,
value
will be interpreted as an unsigned 8-bit integervalue between0
and255
.
import {Buffer }from'node:buffer';const buf =Buffer.from('this is a buffer');console.log(buf.indexOf('this'));// Prints: 0console.log(buf.indexOf('is'));// Prints: 2console.log(buf.indexOf(Buffer.from('a buffer')));// Prints: 8console.log(buf.indexOf(97));// Prints: 8 (97 is the decimal ASCII value for 'a')console.log(buf.indexOf(Buffer.from('a buffer example')));// Prints: -1console.log(buf.indexOf(Buffer.from('a buffer example').slice(0,8)));// Prints: 8const utf16Buffer =Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','utf16le');console.log(utf16Buffer.indexOf('\u03a3',0,'utf16le'));// Prints: 4console.log(utf16Buffer.indexOf('\u03a3', -4,'utf16le'));// Prints: 6
const {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// 5
const {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> Ifvalue
is a string, this is the encoding used todetermine the binary representation of the string that will be searched for inbuf
.Default:'utf8'
.- Returns:<integer> The index of the last occurrence of
value
inbuf
, or-1
ifbuf
does not containvalue
.
Identical tobuf.indexOf()
, except the last occurrence ofvalue
is foundrather than the first occurrence.
import {Buffer }from'node:buffer';const buf =Buffer.from('this buffer is a buffer');console.log(buf.lastIndexOf('this'));// Prints: 0console.log(buf.lastIndexOf('buffer'));// Prints: 17console.log(buf.lastIndexOf(Buffer.from('buffer')));// Prints: 17console.log(buf.lastIndexOf(97));// Prints: 15 (97 is the decimal ASCII value for 'a')console.log(buf.lastIndexOf(Buffer.from('yolo')));// Prints: -1console.log(buf.lastIndexOf('buffer',5));// Prints: 5console.log(buf.lastIndexOf('buffer',4));// Prints: -1const utf16Buffer =Buffer.from('\u039a\u0391\u03a3\u03a3\u0395','utf16le');console.log(utf16Buffer.lastIndexOf('\u03a3',undefined,'utf16le'));// Prints: 6console.log(utf16Buffer.lastIndexOf('\u03a3', -5,'utf16le'));// Prints: 4
const {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
#
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: 1234
const {Buffer } =require('node:buffer');// Create a `Buffer` and write a shorter string to it using UTF-8.const buf =Buffer.alloc(1234);console.log(buf.length);// Prints: 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: 4294967295n
const {Buffer } =require('node:buffer');const buf =Buffer.from([0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff]);console.log(buf.readBigUInt64BE(0));// Prints: 4294967295n
buf.readBigUInt64LE([offset])
#
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: 18446744069414584320n
const {Buffer } =require('node:buffer');const buf =Buffer.from([0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff]);console.log(buf.readBigUInt64LE(0));// Prints: 18446744069414584320n
buf.readDoubleBE([offset])
#
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-304
const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3,4,5,6,7,8]);console.log(buf.readDoubleBE(0));// Prints: 8.20788039913184e-304
buf.readDoubleLE([offset])
#
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-38
const {Buffer } =require('node:buffer');const buf =Buffer.from([1,2,3,4]);console.log(buf.readFloatBE(0));// Prints: 2.387939260590663e-38
buf.readFloatLE([offset])
#
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: 5
const {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: 5
const {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 specifiedoffset
and 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 specifiedoffset
and 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: -546f87a9cbee
const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readIntLE(0,6).toString(16));// Prints: -546f87a9cbee
buf.readUInt8([offset])
#
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: 3456
const {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: 12345678
const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78]);console.log(buf.readUInt32BE(0).toString(16));// Prints: 12345678
buf.readUInt32LE([offset])
#
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 specifiedoffset
and 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 specifiedoffset
and 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: ab9078563412
const {Buffer } =require('node:buffer');const buf =Buffer.from([0x12,0x34,0x56,0x78,0x90,0xab]);console.log(buf.readUIntLE(0,6).toString(16));// Prints: ab9078563412
buf.subarray([start[, end]])
#
start
<integer> Where the newBuffer
will start.Default:0
.end
<integer> Where the newBuffer
will 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 originalBuffer
because 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: !bc
const {Buffer } =require('node:buffer');// Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte// from the original `Buffer`.const buf1 =Buffer.allocUnsafe(26);for (let i =0; i <26; i++) {// 97 is the decimal ASCII value for 'a'. buf1[i] = i +97;}const buf2 = buf1.subarray(0,3);console.log(buf2.toString('ascii',0, buf2.length));// Prints: 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 newBuffer
will start.Default:0
.end
<integer> Where the newBuffer
will 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.length
is 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.length
is 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// 114
const {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 : ab
const {Buffer } =require('node:buffer');const buf =Buffer.alloc(256);const len = buf.write('\u00bd + \u00bc = \u00be',0);console.log(`${len} bytes:${buf.toString('utf8',0, len)}`);// Prints: 12 bytes: ½ + ¼ = ¾const buffer =Buffer.alloc(10);const length = buffer.write('abcd',8);console.log(`${length} bytes:${buffer.toString('utf8',8,10)}`);// Prints: 2 bytes : ab
buf.writeBigInt64BE(value[, offset])
#
value
<bigint> Number to be written tobuf
.offset
<integer> Number of bytes to skip before starting to write. Mustsatisfy:0 <= offset <= buf.length - 8
.Default:0
.- Returns:<integer>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian.
value
is interpreted and written as a two's complement signed integer.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(8);buf.writeBigInt64BE(0x0102030405060708n,0);console.log(buf);// Prints: <Buffer 01 02 03 04 05 06 07 08>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(8);buf.writeBigInt64BE(0x0102030405060708n,0);console.log(buf);// Prints: <Buffer 01 02 03 04 05 06 07 08>
buf.writeBigInt64LE(value[, offset])
#
value
<bigint> Number to be written tobuf
.offset
<integer> Number of bytes to skip before starting to write. Mustsatisfy:0 <= offset <= buf.length - 8
.Default:0
.- Returns:<integer>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian.
value
is interpreted and written as a two's complement signed integer.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(8);buf.writeBigInt64LE(0x0102030405060708n,0);console.log(buf);// Prints: <Buffer 08 07 06 05 04 03 02 01>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(8);buf.writeBigInt64LE(0x0102030405060708n,0);console.log(buf);// Prints: <Buffer 08 07 06 05 04 03 02 01>
buf.writeBigUInt64BE(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian.
This function is also available under thewriteBigUint64BE
alias.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(8);buf.writeBigUInt64BE(0xdecafafecacefaden,0);console.log(buf);// Prints: <Buffer de ca fa fe ca ce fa de>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(8);buf.writeBigUInt64BE(0xdecafafecacefaden,0);console.log(buf);// Prints: <Buffer de ca fa fe ca ce fa de>
buf.writeBigUInt64LE(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(8);buf.writeBigUInt64LE(0xdecafafecacefaden,0);console.log(buf);// Prints: <Buffer de fa ce ca fe fa ca de>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(8);buf.writeBigUInt64LE(0xdecafafecacefaden,0);console.log(buf);// Prints: <Buffer de fa ce ca fe fa ca de>
This function is also available under thewriteBigUint64LE
alias.
buf.writeDoubleBE(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian. Thevalue
must 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian. Thevalue
must 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian. Behavior isundefined whenvalue
is anything other than a JavaScript number.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeFloatBE(0xcafebabe,0);console.log(buf);// Prints: <Buffer 4f 4a fe bb>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(4);buf.writeFloatBE(0xcafebabe,0);console.log(buf);// Prints: <Buffer 4f 4a fe bb>
buf.writeFloatLE(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian. Behavior isundefined whenvalue
is anything other than a JavaScript number.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeFloatLE(0xcafebabe,0);console.log(buf);// Prints: <Buffer bb fe 4a 4f>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(4);buf.writeFloatLE(0xcafebabe,0);console.log(buf);// Prints: <Buffer bb fe 4a 4f>
buf.writeInt8(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
.value
must be a validsigned 8-bit integer. Behavior is undefined whenvalue
is anything other thana signed 8-bit integer.
value
is interpreted and written as a two's complement signed integer.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(2);buf.writeInt8(2,0);buf.writeInt8(-2,1);console.log(buf);// Prints: <Buffer 02 fe>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(2);buf.writeInt8(2,0);buf.writeInt8(-2,1);console.log(buf);// Prints: <Buffer 02 fe>
buf.writeInt16BE(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian. Thevalue
must 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian. Thevalue
must 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian. Thevalue
must 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian. Thevalue
must 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>
offset
plus the number of bytes written.
WritesbyteLength
bytes ofvalue
tobuf
at the specifiedoffset
as 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>
offset
plus the number of bytes written.
WritesbyteLength
bytes ofvalue
tobuf
at the specifiedoffset
as 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
.value
must be avalid unsigned 8-bit integer. Behavior is undefined whenvalue
is anythingother than an unsigned 8-bit integer.
This function is also available under thewriteUint8
alias.
import {Buffer }from'node:buffer';const buf =Buffer.allocUnsafe(4);buf.writeUInt8(0x3,0);buf.writeUInt8(0x4,1);buf.writeUInt8(0x23,2);buf.writeUInt8(0x42,3);console.log(buf);// Prints: <Buffer 03 04 23 42>
const {Buffer } =require('node:buffer');const buf =Buffer.allocUnsafe(4);buf.writeUInt8(0x3,0);buf.writeUInt8(0x4,1);buf.writeUInt8(0x23,2);buf.writeUInt8(0x42,3);console.log(buf);// Prints: <Buffer 03 04 23 42>
buf.writeUInt16BE(value[, offset])
#
History
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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian. Thevalue
must be a valid unsigned 16-bit integer. Behavior is undefined whenvalue
is 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian. Thevalue
must 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as big-endian. Thevalue
must be a valid unsigned 32-bit integer. Behavior is undefined whenvalue
is 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>
offset
plus the number of bytes written.
Writesvalue
tobuf
at the specifiedoffset
as little-endian. Thevalue
must 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>
offset
plus the number of bytes written.
WritesbyteLength
bytes ofvalue
tobuf
at the specifiedoffset
as 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>
offset
plus the number of bytes written.
WritesbyteLength
bytes ofvalue
tobuf
at the specifiedoffset
as 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.buffer
property 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 existingBuffer
or<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
#
- <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
#
- <integer> The largest size allowed for a single
Buffer
instance.
An alias forbuffer.constants.MAX_LENGTH
.
buffer.kStringMaxLength
#
- <integer> The largest length allowed for a single
string
instance.
An alias forbuffer.constants.MAX_STRING_LENGTH
.
buffer.resolveObjectURL(id)
#
History
Version | Changes |
---|---|
v24.0.0 | Marking the API stable. |
v16.7.0 | Added in: v16.7.0 |
id
<string> A'blob:nodedata:...
URL string returned by a prior call toURL.createObjectURL()
.- Returns:<Blob>
Resolves a'blob:nodedata:...'
an associated<Blob> object registered usinga prior call toURL.createObjectURL()
.
buffer.transcode(source, fromEnc, toEnc)
#
History
Version | Changes |
---|---|
v8.0.0 | The |
v7.1.0 | Added in: v7.1.0 |
source
<Buffer> |<Uint8Array> ABuffer
orUint8Array
instance.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
.
Class:SlowBuffer
#
Buffer.allocUnsafeSlow()
instead.SeeBuffer.allocUnsafeSlow()
. This was never a class in the sense thatthe constructor always returned aBuffer
instance, rather than aSlowBuffer
instance.
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 |
- <integer> The largest size allowed for a single
Buffer
instance.
On 32-bit architectures, this value currently is 230 - 1 (about 1GiB).
On 64-bit architectures, this value currently is 253 - 1 (about 8 PiB).
It reflectsv8::TypedArray::kMaxLength
under the hood.
This value is also available asbuffer.kMaxLength
.
Buffer.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 returnedBuffer
differently based on what arguments are provided:
- Passing a number as the first argument to
Buffer()
(e.g.new Buffer(10)
)allocates a newBuffer
object of the specified size. Prior to Node.js 8.0.0,the memory allocated for suchBuffer
instances isnot initialized andcan contain sensitive data. SuchBuffer
instancesmust be subsequentlyinitialized by using eitherbuf.fill(0)
or by writing to theentireBuffer
before reading data from theBuffer
.While this behavior isintentional to improve performance,development experience has demonstrated that a more explicit distinction isrequired between creating a fast-but-uninitializedBuffer
versus creating aslower-but-saferBuffer
. Since Node.js 8.0.0,Buffer(num)
andnew Buffer(num)
return aBuffer
with initialized memory. - Passing a string, array, or
Buffer
as the first argument copies thepassed object's data into theBuffer
. - Passing an<ArrayBuffer> or a<SharedArrayBuffer> returns a
Buffer
that 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 newBuffer
thatcontains a copy of theprovided octets.Buffer.from(arrayBuffer[, byteOffset[, length]])
returns a newBuffer
thatshares the same allocated memory as the given<ArrayBuffer>.Buffer.from(buffer)
returns a newBuffer
thatcontains a copy of thecontents of the givenBuffer
.Buffer.from(string[, encoding])
returns a newBuffer
thatcontains a copy of the provided string.Buffer.alloc(size[, fill[, encoding]])
returns a newinitializedBuffer
of the specified size. This method is slower thanBuffer.allocUnsafe(size)
but guarantees that newlycreatedBuffer
instances never contain old data that is potentiallysensitive. ATypeError
will be thrown ifsize
is not a number.Buffer.allocUnsafe(size)
andBuffer.allocUnsafeSlow(size)
each return anew uninitializedBuffer
of the specifiedsize
. Because theBuffer
isuninitialized, 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()
,Buffer.allocUnsafeSlow()
, andnew SlowBuffer(size)
are not zero-filled.Use of this flag can have a measurable negative impact on performance. Use the--zero-fill-buffers
option only when necessary to enforce that newly allocatedBuffer
instances cannot contain old data that is potentially sensitive.
$node --zero-fill-buffers>Buffer.allocUnsafe(5);<Buffer 00 00 00 00 00>
What makesBuffer.allocUnsafe()
andBuffer.allocUnsafeSlow()
"unsafe"?#
When callingBuffer.allocUnsafe()
andBuffer.allocUnsafeSlow()
, thesegment of allocated memory isuninitialized (it is not zeroed-out). Whilethis design makes the allocation of memory quite fast, the allocated segment ofmemory might contain old data that is potentially sensitive. Using aBuffer
created 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.