2016-11-26 22:25:20 +01:00
|
|
|
|
# Buffer
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-03-23 06:07:22 +01:00
|
|
|
|
<!--introduced_in=v0.1.90-->
|
2017-01-23 04:16:21 +01:00
|
|
|
|
|
2016-07-16 00:35:38 +02:00
|
|
|
|
> Stability: 2 - Stable
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
In Node.js, `Buffer` objects are used to represent binary data in the form
|
|
|
|
|
of a sequence of bytes. Many Node.js APIs, for example streams and file system
|
|
|
|
|
operations, support `Buffer`s, as interactions with the operating system or
|
|
|
|
|
other processes generally always happen in terms of binary data.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
The `Buffer` class is a subclass of the [`Uint8Array`][] class that is built
|
|
|
|
|
into the JavaScript language. A number of additional methods are supported
|
|
|
|
|
that cover additional use cases. Node.js APIs accept plain [`Uint8Array`][]s
|
|
|
|
|
wherever `Buffer`s are supported as well.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Instances of the `Buffer` class, and [`Uint8Array`][]s in general,
|
|
|
|
|
are similar to arrays of integers from `0` to `255`, but correspond to
|
|
|
|
|
fixed-sized blocks of memory and cannot contain any other values.
|
|
|
|
|
The size of a `Buffer` is established when it is created and cannot be changed.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2018-03-23 06:46:25 +01:00
|
|
|
|
The `Buffer` class is within the global scope, making it unlikely that one
|
2016-05-21 12:37:53 +02:00
|
|
|
|
would need to ever use `require('buffer').Buffer`.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Creates a zero-filled Buffer of length 10.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf1 = Buffer.alloc(10);
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Creates a Buffer of length 10,
|
|
|
|
|
// filled with bytes which all have the value `1`.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf2 = Buffer.alloc(10, 1);
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// 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
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// overwritten using fill(), write(), or other functions that fill the Buffer's
|
|
|
|
|
// contents.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf3 = Buffer.allocUnsafe(10);
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Creates a Buffer containing the bytes [1, 2, 3].
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf4 = Buffer.from([1, 2, 3]);
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// 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']);
|
2017-03-02 16:22:12 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// 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');
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
|
|
|
|
|
const buf7 = Buffer.from('tést', 'latin1');
|
2016-01-26 00:00:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
2016-01-05 10:07:09 +01:00
|
|
|
|
## Buffers and Character Encodings
|
2017-02-21 23:38:42 +01:00
|
|
|
|
<!-- YAML
|
|
|
|
|
changes:
|
|
|
|
|
- version: v6.4.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/7111
|
|
|
|
|
description: Introduced `latin1` as an alias for `binary`.
|
|
|
|
|
- version: v5.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/2859
|
|
|
|
|
description: Removed the deprecated `raw` and `raws` encodings.
|
|
|
|
|
-->
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
When converting between `Buffer`s and strings, a character encoding may be
|
|
|
|
|
specified. If no character encoding is specified, UTF-8 will be used as the
|
|
|
|
|
default.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
const buf = Buffer.from('hello world', 'utf8');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf.toString('hex'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 68656c6c6f20776f726c64
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf.toString('base64'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: aGVsbG8gd29ybGQ=
|
2018-03-28 06:34:43 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(Buffer.from('fhqwhgads', 'utf8'));
|
2018-03-28 06:34:43 +02:00
|
|
|
|
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
|
2018-03-30 07:41:41 +02:00
|
|
|
|
console.log(Buffer.from('fhqwhgads', 'utf16le'));
|
2018-03-28 06:34:43 +02:00
|
|
|
|
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
The character encodings currently supported by Node.js are the following:
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `'utf8'`: Multi-byte encoded Unicode characters. Many web pages and other
|
|
|
|
|
document formats use [UTF-8][]. This is the default character encoding.
|
|
|
|
|
When decoding a `Buffer` into a string that does not exclusively contain
|
|
|
|
|
valid UTF-8 data, the Unicode replacement character `U+FFFD` <20> will be used
|
|
|
|
|
to represent those errors.
|
2012-12-06 05:13:14 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `'utf16le'`: Multi-byte encoded Unicode characters. Unlike `'utf8'`, each
|
|
|
|
|
character in the string will be encoded using either 2 or 4 bytes.
|
|
|
|
|
Node.js only supports the [little-endian][endianness] variant of [UTF-16][].
|
2011-03-16 20:59:55 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `'latin1'`: Latin-1 stands for [ISO-8859-1][]. This character encoding only
|
|
|
|
|
supports the Unicode characters from `U+0000` to `U+00FF`. Each character is
|
|
|
|
|
encoded using a single byte. Characters that do not fit into that range are
|
|
|
|
|
truncated and will be mapped to characters in that range.
|
2012-05-03 16:55:25 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Converting a `Buffer` into a string using one of the above is referred to as
|
|
|
|
|
decoding, and converting a string into a `Buffer` is referred to as encoding.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Node.js also supports the following two binary-to-text encodings. For
|
|
|
|
|
binary-to-text encodings, the naming convention is reversed: Converting a
|
|
|
|
|
`Buffer` into a string is typically referred to as encoding, and converting a
|
|
|
|
|
string into a `Buffer` as decoding.
|
|
|
|
|
|
|
|
|
|
* `'base64'`: [Base64][] encoding. When creating a `Buffer` from a string,
|
2016-02-15 18:44:53 +01:00
|
|
|
|
this encoding will also correctly accept "URL and Filename Safe Alphabet" as
|
2019-03-31 10:37:33 +02:00
|
|
|
|
specified in [RFC 4648, Section 5][].
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `'hex'`: Encode each byte as two hexadecimal characters. Data truncation
|
|
|
|
|
may occur when decoding string that do exclusively contain valid hexadecimal
|
|
|
|
|
characters. See below for an example.
|
|
|
|
|
|
|
|
|
|
The following legacy character encodings are also supported:
|
2016-06-02 18:55:36 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `'ascii'`: For 7-bit [ASCII][] data only. When encoding a string into a
|
|
|
|
|
`Buffer`, this is equivalent to using `'latin1'`. When decoding a `Buffer`
|
|
|
|
|
into a string, using encoding this will additionally unset the highest bit of
|
|
|
|
|
each 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 a
|
|
|
|
|
better choice when encoding or decoding ASCII-only text. It is only provided
|
|
|
|
|
for legacy compatibility.
|
2011-02-20 02:29:01 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `'binary'`: Alias for `'latin1'`. See [binary strings][] for more background
|
|
|
|
|
on this topic. The name of this encoding can be very misleading, as all of the
|
|
|
|
|
encodings listed here convert between strings and binary data. For converting
|
|
|
|
|
between strings and `Buffer`s, typically `'utf-8'` is the right choice.
|
|
|
|
|
|
|
|
|
|
* `'ucs2'`: Alias of `'utf16le'`. UCS-2 used to refer to a variant of UTF-16
|
|
|
|
|
that did not support characters that had code points larger than U+FFFF.
|
|
|
|
|
In Node.js, these code points are always supported.
|
2020-01-14 08:37:24 +01:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
Buffer.from('1ag', 'hex');
|
|
|
|
|
// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
|
|
|
|
|
// ('g') encountered.
|
|
|
|
|
|
|
|
|
|
Buffer.from('1a7g', 'hex');
|
|
|
|
|
// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').
|
|
|
|
|
|
|
|
|
|
Buffer.from('1634', 'hex');
|
|
|
|
|
// Prints <Buffer 16 34>, all data represented.
|
|
|
|
|
```
|
2012-05-09 19:07:02 +02:00
|
|
|
|
|
2018-02-06 06:55:16 +01:00
|
|
|
|
Modern Web browsers follow the [WHATWG Encoding Standard][] which aliases
|
|
|
|
|
both `'latin1'` and `'ISO-8859-1'` to `'win-1252'`. This means that while doing
|
|
|
|
|
something like `http.get()`, if the returned charset is one of those listed in
|
|
|
|
|
the WHATWG specification it is possible that the server actually returned
|
2018-04-12 07:46:48 +02:00
|
|
|
|
`'win-1252'`-encoded data, and using `'latin1'` encoding may incorrectly decode
|
|
|
|
|
the characters.
|
2016-06-02 18:55:36 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
## Buffers and TypedArrays
|
2017-02-21 23:38:42 +01:00
|
|
|
|
<!-- YAML
|
|
|
|
|
changes:
|
|
|
|
|
- version: v3.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/2002
|
|
|
|
|
description: The `Buffer`s class now inherits from `Uint8Array`.
|
|
|
|
|
-->
|
2014-06-20 12:02:13 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
`Buffer` instances are also [`Uint8Array`][] instances, which is the language’s
|
|
|
|
|
built-in class for working with binary data. [`Uint8Array`][] in turn is a
|
|
|
|
|
subclass of [`TypedArray`][]. Therefore, all [`TypedArray`][] methods are also
|
|
|
|
|
available on `Buffer`s. However, there are subtle incompatibilities between
|
|
|
|
|
the `Buffer` API and the [`TypedArray`][] API.
|
|
|
|
|
|
|
|
|
|
In particular:
|
2014-06-20 12:02:13 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* While [`TypedArray#slice()`][] creates a copy of part of the `TypedArray`,
|
|
|
|
|
[`Buffer#slice()`][`buf.slice()`] creates a view over the existing `Buffer`
|
|
|
|
|
without copying. This behavior can be surprising, and only exists for legacy
|
|
|
|
|
compatibility. [`TypedArray#subarray()`][] can be used to achieve the behavior
|
|
|
|
|
of [`Buffer#slice()`][`buf.slice()`] on both `Buffer`s and other
|
|
|
|
|
`TypedArray`s.
|
|
|
|
|
* [`buf.toString()`][] is incompatible with its `TypedArray` equivalent.
|
|
|
|
|
* A number of methods, e.g. [`buf.indexOf()`][], support additional arguments.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
There are two ways to create new [`TypedArray`][] instances from a `Buffer`.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
When passing a `Buffer` to a [`TypedArray`][] constructor, the `Buffer`’s
|
|
|
|
|
elements will be copied, interpreted as an array of integers, and not as a byte
|
|
|
|
|
array of the target type. For example,
|
2019-03-31 10:37:33 +02:00
|
|
|
|
`new Uint32Array(Buffer.from([1, 2, 3, 4]))` creates a 4-element
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[`Uint32Array`][] with elements `[1, 2, 3, 4]`, rather than a
|
|
|
|
|
[`Uint32Array`][] with a single element `[0x1020304]` or `[0x4030201]`.
|
2012-11-22 18:30:18 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
In order to create a [`TypedArray`][] that shares its memory with the `Buffer`,
|
|
|
|
|
the underlying [`ArrayBuffer`][] can be passed to the [`TypedArray`][]
|
|
|
|
|
constructor instead:
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from('hello', 'utf16le');
|
|
|
|
|
const uint16arr = new Uint16Array(
|
|
|
|
|
buf.buffer, buf.byteOffset, buf.length / Uint16Array.BYTES_PER_ELEMENT);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
It is also possible to create a new `Buffer` that shares the same allocated
|
|
|
|
|
memory as a [`TypedArray`][] instance by using the `TypedArray` object’s
|
|
|
|
|
`.buffer` property in the same way. [`Buffer.from()`][`Buffer.from(arrayBuf)`]
|
|
|
|
|
behaves like `new Uint8Array()` in this context.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
|
|
|
|
const arr = new Uint16Array(2);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
arr[0] = 5000;
|
|
|
|
|
arr[1] = 4000;
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Copies the contents of `arr`.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf1 = Buffer.from(arr);
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Shares memory with `arr`.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf2 = Buffer.from(arr.buffer);
|
2012-11-22 18:30:18 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 88 a0>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf2);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 88 13 a0 0f>
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
arr[1] = 6000;
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 88 a0>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf2);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 88 13 70 17>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-06-20 22:08:13 +02:00
|
|
|
|
When creating a `Buffer` using a [`TypedArray`][]'s `.buffer`, it is
|
2019-03-31 10:37:33 +02:00
|
|
|
|
possible to use only a portion of the underlying [`ArrayBuffer`][] by passing in
|
2016-07-20 00:38:00 +02:00
|
|
|
|
`byteOffset` and `length` parameters.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
|
|
|
|
const arr = new Uint16Array(20);
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from(arr.buffer, 0, 16);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf.length);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 16
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
The `Buffer.from()` and [`TypedArray.from()`][] have different signatures and
|
|
|
|
|
implementations. Specifically, the [`TypedArray`][] variants accept a second
|
2016-09-15 21:04:20 +02:00
|
|
|
|
argument that is a mapping function that is invoked on every element of the
|
|
|
|
|
typed array:
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
|
|
|
|
* `TypedArray.from(source[, mapFn[, thisArg]])`
|
|
|
|
|
|
|
|
|
|
The `Buffer.from()` method, however, does not support the use of a mapping
|
|
|
|
|
function:
|
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* [`Buffer.from(array)`][]
|
|
|
|
|
* [`Buffer.from(buffer)`][]
|
2018-03-23 06:33:16 +01:00
|
|
|
|
* [`Buffer.from(arrayBuffer[, byteOffset[, length]])`][`Buffer.from(arrayBuf)`]
|
2016-07-20 00:38:00 +02:00
|
|
|
|
* [`Buffer.from(string[, encoding])`][`Buffer.from(string)`]
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2018-03-29 23:23:58 +02:00
|
|
|
|
## Buffers and iteration
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2018-03-29 23:23:58 +02:00
|
|
|
|
`Buffer` instances can be iterated over using `for..of` syntax:
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from([1, 2, 3]);
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-04-01 01:26:56 +02:00
|
|
|
|
for (const b of buf) {
|
|
|
|
|
console.log(b);
|
|
|
|
|
}
|
2016-01-17 18:39:07 +01:00
|
|
|
|
// Prints:
|
|
|
|
|
// 1
|
|
|
|
|
// 2
|
|
|
|
|
// 3
|
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Additionally, the [`buf.values()`][], [`buf.keys()`][], and
|
|
|
|
|
[`buf.entries()`][] methods can be used to create iterators.
|
2012-11-22 18:30:18 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
## Class: `Buffer`
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
The `Buffer` class is a global type for dealing with binary data directly.
|
2012-02-27 20:07:25 +01:00
|
|
|
|
It can be constructed in a variety of ways.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
### Class Method: `Buffer.alloc(size[, fill[, encoding]])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2020-03-04 14:06:56 +01:00
|
|
|
|
added: v5.10.0
|
2017-02-21 23:38:42 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2020-03-04 14:06:56 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18129
|
|
|
|
|
description: Attempting to fill a non-zero length buffer with a zero length
|
|
|
|
|
buffer triggers a thrown exception.
|
|
|
|
|
- version: v10.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/17427
|
|
|
|
|
description: Specifying an invalid string for `fill` triggers a thrown
|
|
|
|
|
exception.
|
|
|
|
|
- version: v8.9.3
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/17428
|
|
|
|
|
description: Specifying an invalid string for `fill` now results in a
|
|
|
|
|
zero-filled buffer.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `size` {integer} The desired length of the new `Buffer`.
|
|
|
|
|
* `fill` {string|Buffer|Uint8Array|integer} A value to pre-fill the new `Buffer`
|
|
|
|
|
with. **Default:** `0`.
|
|
|
|
|
* `encoding` {string} If `fill` is a string, this is its encoding.
|
|
|
|
|
**Default:** `'utf8'`.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the
|
|
|
|
|
`Buffer` will be zero-filled.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
const buf = Buffer.alloc(5);
|
|
|
|
|
|
|
|
|
|
console.log(buf);
|
|
|
|
|
// Prints: <Buffer 00 00 00 00 00>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
If `size` is larger than
|
|
|
|
|
[`buffer.constants.MAX_LENGTH`][] or smaller than 0, [`ERR_INVALID_OPT_VALUE`][]
|
|
|
|
|
is thrown.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
If `fill` is specified, the allocated `Buffer` will be initialized by calling
|
|
|
|
|
[`buf.fill(fill)`][`buf.fill()`].
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.alloc(5, 'a');
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(buf);
|
|
|
|
|
// Prints: <Buffer 61 61 61 61 61>
|
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
If both `fill` and `encoding` are specified, the allocated `Buffer` will be
|
|
|
|
|
initialized by calling [`buf.fill(fill, encoding)`][`buf.fill()`].
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
|
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Calling [`Buffer.alloc()`][] can be measurably slower than the alternative
|
|
|
|
|
[`Buffer.allocUnsafe()`][] but ensures that the newly created `Buffer` instance
|
|
|
|
|
contents will never contain sensitive data from previous allocations, including
|
|
|
|
|
data that might not have been allocated for `Buffer`s.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
A `TypeError` will be thrown if `size` is not a number.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
### Class Method: `Buffer.allocUnsafe(size)`
|
2017-02-13 03:49:35 +01:00
|
|
|
|
<!-- YAML
|
2020-03-04 14:06:56 +01:00
|
|
|
|
added: v5.10.0
|
2017-02-21 23:38:42 +01:00
|
|
|
|
changes:
|
|
|
|
|
- version: v7.0.0
|
2020-03-04 14:06:56 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/7079
|
|
|
|
|
description: Passing a negative `size` will now throw an error.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
-->
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `size` {integer} The desired length of the new `Buffer`.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Allocates a new `Buffer` of `size` bytes. If `size` is larger than
|
|
|
|
|
[`buffer.constants.MAX_LENGTH`][] or smaller than 0, [`ERR_INVALID_OPT_VALUE`][]
|
|
|
|
|
is thrown.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
The underlying memory for `Buffer` instances created in this way is *not
|
|
|
|
|
initialized*. The contents of the newly created `Buffer` are unknown and
|
|
|
|
|
*may contain sensitive data*. Use [`Buffer.alloc()`][] instead to initialize
|
|
|
|
|
`Buffer` instances with zeroes.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(10);
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(buf);
|
|
|
|
|
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
buf.fill(0);
|
|
|
|
|
|
|
|
|
|
console.log(buf);
|
|
|
|
|
// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>
|
2016-01-26 00:00:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
A `TypeError` will be thrown if `size` is not a number.
|
|
|
|
|
|
2019-06-20 22:08:13 +02:00
|
|
|
|
The `Buffer` module pre-allocates an internal `Buffer` instance of
|
2019-03-31 10:37:33 +02:00
|
|
|
|
size [`Buffer.poolSize`][] that is used as a pool for the fast allocation of new
|
|
|
|
|
`Buffer` instances created using [`Buffer.allocUnsafe()`][] and the deprecated
|
2016-09-15 21:04:20 +02:00
|
|
|
|
`new Buffer(size)` constructor only when `size` is less than or equal to
|
2019-03-31 10:37:33 +02:00
|
|
|
|
`Buffer.poolSize >> 1` (floor of [`Buffer.poolSize`][] divided by two).
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
|
|
|
|
Use of this pre-allocated internal memory pool is a key difference between
|
|
|
|
|
calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Specifically, `Buffer.alloc(size, fill)` will *never* use the internal `Buffer`
|
2016-01-26 00:00:06 +01:00
|
|
|
|
pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal
|
2019-03-31 10:37:33 +02:00
|
|
|
|
`Buffer` pool if `size` is less than or equal to half [`Buffer.poolSize`][]. The
|
2016-01-26 00:00:06 +01:00
|
|
|
|
difference is subtle but can be important when an application requires the
|
2019-03-31 10:37:33 +02:00
|
|
|
|
additional performance that [`Buffer.allocUnsafe()`][] provides.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.allocUnsafeSlow(size)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2017-09-11 09:10:09 +02:00
|
|
|
|
added: v5.12.0
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2016-03-21 20:38:08 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `size` {integer} The desired length of the new `Buffer`.
|
2016-03-21 20:38:08 +01:00
|
|
|
|
|
2018-04-12 20:10:46 +02:00
|
|
|
|
Allocates a new `Buffer` of `size` bytes. If `size` is larger than
|
2019-03-31 10:37:33 +02:00
|
|
|
|
[`buffer.constants.MAX_LENGTH`][] or smaller than 0, [`ERR_INVALID_OPT_VALUE`][]
|
|
|
|
|
is thrown. A zero-length `Buffer` is created if `size` is 0.
|
2016-03-21 20:38:08 +01:00
|
|
|
|
|
|
|
|
|
The underlying memory for `Buffer` instances created in this way is *not
|
|
|
|
|
initialized*. The contents of the newly created `Buffer` are unknown and
|
2018-04-02 08:32:59 +02:00
|
|
|
|
*may contain sensitive data*. Use [`buf.fill(0)`][`buf.fill()`] to initialize
|
|
|
|
|
such `Buffer` instances with zeroes.
|
2016-03-21 20:38:08 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
When using [`Buffer.allocUnsafe()`][] to allocate new `Buffer` instances,
|
2018-04-02 08:32:59 +02:00
|
|
|
|
allocations under 4KB are sliced from a single pre-allocated `Buffer`. This
|
|
|
|
|
allows applications to avoid the garbage collection overhead of creating many
|
|
|
|
|
individually allocated `Buffer` instances. This approach improves both
|
|
|
|
|
performance and memory usage by eliminating the need to track and clean up as
|
2020-03-04 14:06:56 +01:00
|
|
|
|
many individual `ArrayBuffer` objects.
|
2016-03-21 20:38:08 +01:00
|
|
|
|
|
|
|
|
|
However, in the case where a developer may need to retain a small chunk of
|
|
|
|
|
memory from a pool for an indeterminate amount of time, it may be appropriate
|
2018-04-02 08:32:59 +02:00
|
|
|
|
to create an un-pooled `Buffer` instance using `Buffer.allocUnsafeSlow()` and
|
|
|
|
|
then copying out the relevant bits.
|
2016-03-21 20:38:08 +01:00
|
|
|
|
|
|
|
|
|
```js
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Need to keep around a few small chunks of memory.
|
2016-03-21 20:38:08 +01:00
|
|
|
|
const store = [];
|
|
|
|
|
|
|
|
|
|
socket.on('readable', () => {
|
2019-01-07 15:37:34 +01:00
|
|
|
|
let data;
|
|
|
|
|
while (null !== (data = readable.read())) {
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Allocate for retained data.
|
2019-01-07 15:37:34 +01:00
|
|
|
|
const sb = Buffer.allocUnsafeSlow(10);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Copy the data into the new allocation.
|
2019-01-07 15:37:34 +01:00
|
|
|
|
data.copy(sb, 0, 0, 10);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2019-01-07 15:37:34 +01:00
|
|
|
|
store.push(sb);
|
|
|
|
|
}
|
2016-03-21 20:38:08 +01:00
|
|
|
|
});
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
A `TypeError` will be thrown if `size` is not a number.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.byteLength(string[, encoding])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.1.90
|
2017-02-21 23:38:42 +01:00
|
|
|
|
changes:
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8946
|
|
|
|
|
description: Passing invalid input will now throw an error.
|
|
|
|
|
- version: v5.10.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/5255
|
|
|
|
|
description: The `string` parameter can now be any `TypedArray`, `DataView`
|
|
|
|
|
or `ArrayBuffer`.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2017-09-20 11:53:29 +02:00
|
|
|
|
* `string` {string|Buffer|TypedArray|DataView|ArrayBuffer|SharedArrayBuffer} A
|
|
|
|
|
value to calculate the length of.
|
2017-02-04 16:15:33 +01:00
|
|
|
|
* `encoding` {string} If `string` is a string, this is its encoding.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
**Default:** `'utf8'`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} The number of bytes contained within `string`.
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Returns the byte length of a string when encoded using `encoding`.
|
|
|
|
|
This is not the same as [`String.prototype.length`][], which does not account
|
|
|
|
|
for the encoding that is used to convert the string into bytes.
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2018-02-06 06:55:16 +01:00
|
|
|
|
For `'base64'` and `'hex'`, this function assumes valid input. For strings that
|
2020-03-04 14:06:56 +01:00
|
|
|
|
contain non-base64/hex-encoded data (e.g. whitespace), the return value might be
|
2018-02-06 06:55:16 +01:00
|
|
|
|
greater than the length of a `Buffer` created from the string.
|
2017-02-09 19:47:48 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
|
|
|
|
const str = '\u00bd + \u00bc = \u00be';
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(`${str}: ${str.length} characters, ` +
|
|
|
|
|
`${Buffer.byteLength(str, 'utf8')} bytes`);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytes
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
When `string` is a `Buffer`/[`DataView`][]/[`TypedArray`][]/[`ArrayBuffer`][]/
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[`SharedArrayBuffer`][], the byte length as reported by `.byteLength`
|
|
|
|
|
is returned.
|
2016-02-16 04:08:49 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.compare(buf1, buf2)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.13
|
2017-02-22 00:10:25 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The arguments can now be `Uint8Array`s.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-12-10 22:28:37 +01:00
|
|
|
|
* `buf1` {Buffer|Uint8Array}
|
|
|
|
|
* `buf2` {Buffer|Uint8Array}
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* Returns: {integer} Either `-1`, `0`, or `1`, depending on the result of the
|
|
|
|
|
comparison. See [`buf.compare()`][] for details.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Compares `buf1` to `buf2`, typically for the purpose of sorting arrays of
|
2016-07-20 00:38:00 +02:00
|
|
|
|
`Buffer` instances. This is equivalent to calling
|
|
|
|
|
[`buf1.compare(buf2)`][`buf.compare()`].
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf1 = Buffer.from('1234');
|
|
|
|
|
const buf2 = Buffer.from('0123');
|
|
|
|
|
const arr = [buf1, buf2];
|
|
|
|
|
|
2018-02-12 23:24:54 +01:00
|
|
|
|
console.log(arr.sort(Buffer.compare));
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// (This result is equal to: [buf2, buf1].)
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.concat(list[, totalLength])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.7.11
|
2017-02-22 00:10:25 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The elements of `list` can now be `Uint8Array`s.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* `list` {Buffer[] | Uint8Array[]} List of `Buffer` or [`Uint8Array`][]
|
2020-03-04 14:06:56 +01:00
|
|
|
|
instances to concatenate.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `totalLength` {integer} Total length of the `Buffer` instances in `list`
|
2017-06-18 21:53:54 +02:00
|
|
|
|
when concatenated.
|
2016-11-11 21:29:01 +01:00
|
|
|
|
* Returns: {Buffer}
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Returns a new `Buffer` which is the result of concatenating all the `Buffer`
|
|
|
|
|
instances in the `list` together.
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2015-12-20 17:57:03 +01:00
|
|
|
|
If the list has no items, or if the `totalLength` is 0, then a new zero-length
|
2016-07-20 00:57:50 +02:00
|
|
|
|
`Buffer` is returned.
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
If `totalLength` is not provided, it is calculated from the `Buffer` instances
|
2020-03-04 14:06:56 +01:00
|
|
|
|
in `list` by adding their lengths.
|
2013-04-18 01:26:15 +02:00
|
|
|
|
|
2017-03-14 15:43:08 +01:00
|
|
|
|
If `totalLength` is provided, it is coerced to an unsigned integer. If the
|
|
|
|
|
combined length of the `Buffer`s in `list` exceeds `totalLength`, the result is
|
|
|
|
|
truncated to `totalLength`.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Create a single `Buffer` from a list of three `Buffer` instances.
|
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf1 = Buffer.alloc(10);
|
|
|
|
|
const buf2 = Buffer.alloc(14);
|
|
|
|
|
const buf3 = Buffer.alloc(18);
|
2016-01-17 18:39:07 +01:00
|
|
|
|
const totalLength = buf1.length + buf2.length + buf3.length;
|
2015-10-08 05:14:16 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(totalLength);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 42
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(bufA);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 00 00 00 00 ...>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(bufA.length);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 42
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-10-08 05:14:16 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.from(array)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2016-07-20 01:07:19 +02:00
|
|
|
|
added: v5.10.0
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2018-04-09 14:25:04 +02:00
|
|
|
|
* `array` {integer[]}
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Allocates a new `Buffer` using an `array` of bytes in the range `0` – `255`.
|
|
|
|
|
Array entries outside that range will be truncated to fit into it.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
|
2016-01-26 00:00:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-30 19:45:19 +01:00
|
|
|
|
A `TypeError` will be thrown if `array` is not an `Array` or other type
|
|
|
|
|
appropriate for `Buffer.from()` variants.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.from(arrayBuffer[, byteOffset[, length]])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v5.10.0
|
|
|
|
|
-->
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* `arrayBuffer` {ArrayBuffer|SharedArrayBuffer} An [`ArrayBuffer`][],
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[`SharedArrayBuffer`][], for example the `.buffer` property of a
|
|
|
|
|
[`TypedArray`][].
|
2018-04-02 03:44:32 +02:00
|
|
|
|
* `byteOffset` {integer} Index of first byte to expose. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `length` {integer} Number of bytes to expose.
|
2020-02-04 11:51:13 +01:00
|
|
|
|
**Default:** `arrayBuffer.byteLength - byteOffset`.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
This creates a view of the [`ArrayBuffer`][] without copying the underlying
|
2017-01-13 01:29:22 +01:00
|
|
|
|
memory. For example, when passed a reference to the `.buffer` property of a
|
2019-03-31 10:37:33 +02:00
|
|
|
|
[`TypedArray`][] instance, the newly created `Buffer` will share the same
|
|
|
|
|
allocated memory as the [`TypedArray`][].
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const arr = new Uint16Array(2);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
arr[0] = 5000;
|
|
|
|
|
arr[1] = 4000;
|
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Shares memory with `arr`.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from(arr.buffer);
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 88 13 a0 0f>
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Changing the original Uint16Array changes the Buffer also.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
arr[1] = 6000;
|
|
|
|
|
|
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 88 13 70 17>
|
2016-01-26 00:00:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The optional `byteOffset` and `length` arguments specify a memory range within
|
|
|
|
|
the `arrayBuffer` that will be shared by the `Buffer`.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const ab = new ArrayBuffer(10);
|
|
|
|
|
const buf = Buffer.from(ab, 0, 2);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
console.log(buf.length);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 2
|
2016-01-26 00:00:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
A `TypeError` will be thrown if `arrayBuffer` is not an [`ArrayBuffer`][] or a
|
|
|
|
|
[`SharedArrayBuffer`][] or other type appropriate for `Buffer.from()` variants.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.from(buffer)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2016-07-20 01:07:19 +02:00
|
|
|
|
added: v5.10.0
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* `buffer` {Buffer|Uint8Array} An existing `Buffer` or [`Uint8Array`][] from
|
|
|
|
|
which to copy data.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
|
|
|
|
Copies the passed `buffer` data onto a new `Buffer` instance.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf1 = Buffer.from('buffer');
|
|
|
|
|
const buf2 = Buffer.from(buf1);
|
|
|
|
|
|
|
|
|
|
buf1[0] = 0x61;
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
console.log(buf1.toString());
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: auffer
|
2016-01-26 00:00:06 +01:00
|
|
|
|
console.log(buf2.toString());
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: buffer
|
2016-01-26 00:00:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-30 19:45:19 +01:00
|
|
|
|
A `TypeError` will be thrown if `buffer` is not a `Buffer` or other type
|
|
|
|
|
appropriate for `Buffer.from()` variants.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.from(object[, offsetOrEncoding[, length]])`
|
2017-06-16 21:35:15 +02:00
|
|
|
|
<!-- YAML
|
2017-07-19 17:40:29 +02:00
|
|
|
|
added: v8.2.0
|
2017-06-16 21:35:15 +02:00
|
|
|
|
-->
|
|
|
|
|
|
2019-03-31 10:08:16 +02:00
|
|
|
|
* `object` {Object} An object supporting `Symbol.toPrimitive` or `valueOf()`.
|
|
|
|
|
* `offsetOrEncoding` {integer|string} A byte-offset or encoding, depending on
|
2017-06-16 21:35:15 +02:00
|
|
|
|
the value returned either by `object.valueOf()` or
|
|
|
|
|
`object[Symbol.toPrimitive]()`.
|
2019-03-31 10:08:16 +02:00
|
|
|
|
* `length` {integer} A length, depending on the value returned either by
|
2017-06-16 21:35:15 +02:00
|
|
|
|
`object.valueOf()` or `object[Symbol.toPrimitive]()`.
|
|
|
|
|
|
|
|
|
|
For objects whose `valueOf()` function returns a value not strictly equal to
|
|
|
|
|
`object`, returns `Buffer.from(object.valueOf(), offsetOrEncoding, length)`.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from(new String('this is a test'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>
|
2017-06-16 21:35:15 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
For objects that support `Symbol.toPrimitive`, returns
|
|
|
|
|
`Buffer.from(object[Symbol.toPrimitive](), offsetOrEncoding, length)`.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
class Foo {
|
|
|
|
|
[Symbol.toPrimitive]() {
|
|
|
|
|
return 'this is a test';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const buf = Buffer.from(new Foo(), 'utf8');
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>
|
2017-06-16 21:35:15 +02:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-30 19:45:19 +01:00
|
|
|
|
A `TypeError` will be thrown if `object` has not mentioned methods or is not of
|
|
|
|
|
other type appropriate for `Buffer.from()` variants.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.from(string[, encoding])`
|
2019-01-13 18:49:56 +01:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v5.10.0
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `string` {string} A string to encode.
|
|
|
|
|
* `encoding` {string} The encoding of `string`. **Default:** `'utf8'`.
|
|
|
|
|
|
|
|
|
|
Creates a new `Buffer` containing `string`. The `encoding` parameter identifies
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the character encoding to be used when converting `string` into bytes.
|
2019-01-13 18:49:56 +01:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf1 = Buffer.from('this is a tést');
|
|
|
|
|
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');
|
|
|
|
|
|
|
|
|
|
console.log(buf1.toString());
|
|
|
|
|
// Prints: this is a tést
|
|
|
|
|
console.log(buf2.toString());
|
|
|
|
|
// Prints: this is a tést
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(buf1.toString('latin1'));
|
|
|
|
|
// Prints: this is a tést
|
2019-01-13 18:49:56 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-30 19:45:19 +01:00
|
|
|
|
A `TypeError` will be thrown if `string` is not a string or other type
|
|
|
|
|
appropriate for `Buffer.from()` variants.
|
2019-01-13 18:49:56 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.isBuffer(obj)`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.1.101
|
|
|
|
|
-->
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2016-01-26 04:05:43 +01:00
|
|
|
|
* `obj` {Object}
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {boolean}
|
2015-01-10 21:20:13 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Returns `true` if `obj` is a `Buffer`, `false` otherwise.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Method: `Buffer.isEncoding(encoding)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.9.1
|
|
|
|
|
-->
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `encoding` {string} A character encoding name to check.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {boolean}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Returns `true` if `encoding` is the name of a supported character encoding,
|
|
|
|
|
or `false` otherwise.
|
2012-09-09 01:10:00 +02:00
|
|
|
|
|
2019-06-22 00:06:48 +02:00
|
|
|
|
```js
|
|
|
|
|
console.log(Buffer.isEncoding('utf-8'));
|
|
|
|
|
// Prints: true
|
|
|
|
|
|
|
|
|
|
console.log(Buffer.isEncoding('hex'));
|
|
|
|
|
// Prints: true
|
|
|
|
|
|
|
|
|
|
console.log(Buffer.isEncoding('utf/8'));
|
|
|
|
|
// Prints: false
|
|
|
|
|
|
|
|
|
|
console.log(Buffer.isEncoding(''));
|
|
|
|
|
// Prints: false
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### Class Property: `Buffer.poolSize`
|
2016-07-20 01:02:02 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.3
|
|
|
|
|
-->
|
|
|
|
|
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* {integer} **Default:** `8192`
|
2016-07-20 01:02:02 +02:00
|
|
|
|
|
2018-04-04 07:24:52 +02:00
|
|
|
|
This is the size (in bytes) of pre-allocated internal `Buffer` instances used
|
|
|
|
|
for pooling. This value may be modified.
|
2016-07-20 01:02:02 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf[index]`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
type: property
|
|
|
|
|
name: [index]
|
|
|
|
|
-->
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2019-03-31 10:02:42 +02:00
|
|
|
|
* `index` {integer}
|
|
|
|
|
|
2015-12-20 17:57:03 +01:00
|
|
|
|
The index operator `[index]` can be used to get and set the octet at position
|
2016-07-20 00:57:50 +02:00
|
|
|
|
`index` in `buf`. The values refer to individual bytes, so the legal value
|
2015-12-20 17:57:03 +01:00
|
|
|
|
range is between `0x00` and `0xFF` (hex) or `0` and `255` (decimal).
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2017-02-10 14:30:51 +01:00
|
|
|
|
This operator is inherited from `Uint8Array`, so its behavior on out-of-bounds
|
2020-03-04 14:06:56 +01:00
|
|
|
|
access is the same as `Uint8Array`. In other words, `buf[index]` returns
|
|
|
|
|
`undefined` when `index` is negative or `>= buf.length`, and
|
|
|
|
|
`buf[index] = value` does not modify the buffer if `index` is negative or
|
|
|
|
|
`>= buf.length`.
|
2017-02-10 14:30:51 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Copy an ASCII string into a `Buffer` one byte at a time.
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// (This only works for ASCII-only strings. In general, one should use
|
|
|
|
|
// `Buffer.from()` to perform this conversion.)
|
2018-03-25 00:33:11 +01:00
|
|
|
|
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const str = 'Node.js';
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(str.length);
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2017-04-21 16:38:31 +02:00
|
|
|
|
for (let i = 0; i < str.length; i++) {
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf[i] = str.charCodeAt(i);
|
|
|
|
|
}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(buf.toString('utf8'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: Node.js
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.buffer`
|
2017-01-10 20:25:48 +01:00
|
|
|
|
|
2018-04-29 19:46:41 +02:00
|
|
|
|
* {ArrayBuffer} The underlying `ArrayBuffer` object based on
|
|
|
|
|
which this `Buffer` object is created.
|
2017-01-10 20:25:48 +01:00
|
|
|
|
|
2019-09-22 06:04:36 +02:00
|
|
|
|
This `ArrayBuffer` is not guaranteed to correspond exactly to the original
|
|
|
|
|
`Buffer`. See the notes on `buf.byteOffset` for details.
|
|
|
|
|
|
2017-01-10 20:25:48 +01:00
|
|
|
|
```js
|
|
|
|
|
const arrayBuffer = new ArrayBuffer(16);
|
|
|
|
|
const buffer = Buffer.from(arrayBuffer);
|
|
|
|
|
|
|
|
|
|
console.log(buffer.buffer === arrayBuffer);
|
|
|
|
|
// Prints: true
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.byteOffset`
|
2018-07-09 15:31:18 +02:00
|
|
|
|
|
|
|
|
|
* {integer} The `byteOffset` on the underlying `ArrayBuffer` object based on
|
|
|
|
|
which this `Buffer` object is created.
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
When setting `byteOffset` in `Buffer.from(ArrayBuffer, byteOffset, length)`,
|
|
|
|
|
or sometimes when allocating a buffer smaller than `Buffer.poolSize`, the
|
2018-07-09 15:31:18 +02:00
|
|
|
|
buffer doesn't start from a zero offset on the underlying `ArrayBuffer`.
|
|
|
|
|
|
|
|
|
|
This can cause problems when accessing the underlying `ArrayBuffer` directly
|
2020-03-04 14:06:56 +01:00
|
|
|
|
using `buf.buffer`, as other parts of the `ArrayBuffer` may be unrelated
|
2018-07-09 15:31:18 +02:00
|
|
|
|
to the `buf` object itself.
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
A common issue when creating a `TypedArray` object that shares its memory with
|
|
|
|
|
a `Buffer` is that in this case one needs to specify the `byteOffset` correctly:
|
2018-07-09 15:31:18 +02:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
// Create a buffer smaller than `Buffer.poolSize`.
|
|
|
|
|
const nodeBuffer = new Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// 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`.
|
2018-07-09 15:31:18 +02:00
|
|
|
|
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.13
|
2017-02-21 23:38:42 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The `target` parameter can now be a `Uint8Array`.
|
2017-02-21 23:38:42 +01:00
|
|
|
|
- version: v5.11.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/5880
|
|
|
|
|
description: Additional parameters for specifying offsets are supported now.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2016-03-23 22:27:39 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* `target` {Buffer|Uint8Array} A `Buffer` or [`Uint8Array`][] with which to
|
2018-04-14 23:53:08 +02:00
|
|
|
|
compare `buf`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `targetStart` {integer} The offset within `target` at which to begin
|
2018-04-02 03:44:32 +02:00
|
|
|
|
comparison. **Default:** `0`.
|
2019-03-31 10:14:42 +02:00
|
|
|
|
* `targetEnd` {integer} The offset within `target` at which to end comparison
|
2018-04-02 03:44:32 +02:00
|
|
|
|
(not inclusive). **Default:** `target.length`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `sourceStart` {integer} The offset within `buf` at which to begin comparison.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
**Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `sourceEnd` {integer} The offset within `buf` at which to end comparison
|
2019-03-31 10:37:33 +02:00
|
|
|
|
(not inclusive). **Default:** [`buf.length`][].
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2014-03-06 19:21:04 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Compares `buf` with `target` and returns a number indicating whether `buf`
|
|
|
|
|
comes before, after, or is the same as `target` in sort order.
|
|
|
|
|
Comparison is based on the actual sequence of bytes in each `Buffer`.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-03-23 22:27:39 +01:00
|
|
|
|
* `0` is returned if `target` is the same as `buf`
|
|
|
|
|
* `1` is returned if `target` should come *before* `buf` when sorted.
|
|
|
|
|
* `-1` is returned if `target` should come *after* `buf` when sorted.
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf1 = Buffer.from('ABC');
|
|
|
|
|
const buf2 = Buffer.from('BCD');
|
|
|
|
|
const buf3 = Buffer.from('ABCD');
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
|
|
|
|
console.log(buf1.compare(buf1));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 0
|
2015-12-20 17:57:03 +01:00
|
|
|
|
console.log(buf1.compare(buf2));
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: -1
|
2015-12-20 17:57:03 +01:00
|
|
|
|
console.log(buf1.compare(buf3));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: -1
|
2015-12-20 17:57:03 +01:00
|
|
|
|
console.log(buf2.compare(buf1));
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: 1
|
2015-12-20 17:57:03 +01:00
|
|
|
|
console.log(buf2.compare(buf3));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1
|
|
|
|
|
console.log([buf1, buf2, buf3].sort(Buffer.compare));
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// (This result is equal to: [buf1, buf3, buf2].)
|
2015-12-20 17:57:03 +01:00
|
|
|
|
```
|
2014-03-06 19:21:04 +01:00
|
|
|
|
|
2016-04-21 00:12:40 +02:00
|
|
|
|
The optional `targetStart`, `targetEnd`, `sourceStart`, and `sourceEnd`
|
2016-07-20 00:57:50 +02:00
|
|
|
|
arguments can be used to limit the comparison to specific ranges within `target`
|
|
|
|
|
and `buf` respectively.
|
|
|
|
|
|
2016-03-23 22:27:39 +01:00
|
|
|
|
```js
|
|
|
|
|
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));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 0
|
2016-03-23 22:27:39 +01:00
|
|
|
|
console.log(buf1.compare(buf2, 0, 6, 4));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: -1
|
2016-03-23 22:27:39 +01:00
|
|
|
|
console.log(buf1.compare(buf2, 5, 6, 5));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1
|
2016-03-23 22:27:39 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
[`ERR_OUT_OF_RANGE`][] is thrown if `targetStart < 0`, `sourceStart < 0`,
|
2018-04-12 20:10:46 +02:00
|
|
|
|
`targetEnd > target.byteLength`, or `sourceEnd > source.byteLength`.
|
2016-03-23 22:27:39 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.1.90
|
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* `target` {Buffer|Uint8Array} A `Buffer` or [`Uint8Array`][] to copy into.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `targetStart` {integer} The offset within `target` at which to begin
|
2018-04-05 04:37:58 +02:00
|
|
|
|
writing. **Default:** `0`.
|
|
|
|
|
* `sourceStart` {integer} The offset within `buf` from which to begin copying.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
**Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `sourceEnd` {integer} The offset within `buf` at which to stop copying (not
|
2019-03-31 10:37:33 +02:00
|
|
|
|
inclusive). **Default:** [`buf.length`][].
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer} The number of bytes copied.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Copies data from a region of `buf` to a region in `target`, even if the `target`
|
2016-07-20 00:57:50 +02:00
|
|
|
|
memory region overlaps with `buf`.
|
2015-10-28 01:39:23 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[`TypedArray#set()`][] performs the same operation, and is available for all
|
|
|
|
|
TypedArrays, including Node.js `Buffer`s, although it takes different
|
|
|
|
|
function arguments.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Create two `Buffer` instances.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf1 = Buffer.allocUnsafe(26);
|
|
|
|
|
const buf2 = Buffer.allocUnsafe(26).fill('!');
|
2010-11-21 23:22:34 +01:00
|
|
|
|
|
2017-04-21 16:38:31 +02:00
|
|
|
|
for (let i = 0; i < 26; i++) {
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// 97 is the decimal ASCII value for 'a'.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
buf1[i] = i + 97;
|
2016-01-17 18:39:07 +01:00
|
|
|
|
}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf1.copy(buf2, 8, 16, 20);
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// This is equivalent to:
|
|
|
|
|
// buf2.set(buf1.subarray(16, 20), 8);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf2.toString('ascii', 0, 25));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Create a `Buffer` and copy data from one region to an overlapping region
|
|
|
|
|
// within the same `Buffer`.
|
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(26);
|
2015-01-10 21:20:13 +01:00
|
|
|
|
|
2017-04-21 16:38:31 +02:00
|
|
|
|
for (let i = 0; i < 26; i++) {
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// 97 is the decimal ASCII value for 'a'.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
buf[i] = i + 97;
|
2016-01-17 18:39:07 +01:00
|
|
|
|
}
|
2015-01-10 21:20:13 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.copy(buf, 0, 4, 10);
|
2015-01-10 21:20:13 +01:00
|
|
|
|
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.toString());
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: efghijghijklmnopqrstuvwxyz
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-01-10 21:20:13 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.entries()`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v1.1.0
|
|
|
|
|
-->
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
2016-11-11 21:29:01 +01:00
|
|
|
|
* Returns: {Iterator}
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Creates and returns an [iterator][] of `[index, byte]` pairs from the contents
|
|
|
|
|
of `buf`.
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Log the entire contents of a `Buffer`.
|
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from('buffer');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2018-02-12 23:24:54 +01:00
|
|
|
|
for (const pair of buf.entries()) {
|
|
|
|
|
console.log(pair);
|
|
|
|
|
}
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints:
|
2016-01-26 04:05:43 +01:00
|
|
|
|
// [0, 98]
|
|
|
|
|
// [1, 117]
|
|
|
|
|
// [2, 102]
|
|
|
|
|
// [3, 102]
|
|
|
|
|
// [4, 101]
|
|
|
|
|
// [5, 114]
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.equals(otherBuffer)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2016-07-20 01:07:19 +02:00
|
|
|
|
added: v0.11.13
|
2017-02-22 00:10:25 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The arguments can now be `Uint8Array`s.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
* `otherBuffer` {Buffer|Uint8Array} A `Buffer` or [`Uint8Array`][] with which to
|
2019-03-31 10:02:42 +02:00
|
|
|
|
compare `buf`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {boolean}
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Returns `true` if both `buf` and `otherBuffer` have exactly the same bytes,
|
2020-03-04 14:06:56 +01:00
|
|
|
|
`false` otherwise. Equivalent to
|
|
|
|
|
[`buf.compare(otherBuffer) === 0`][`buf.compare()`].
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf1 = Buffer.from('ABC');
|
|
|
|
|
const buf2 = Buffer.from('414243', 'hex');
|
|
|
|
|
const buf3 = Buffer.from('ABCD');
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf1.equals(buf2));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: true
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf1.equals(buf3));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: false
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-12-10 10:12:15 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.fill(value[, offset[, end]][, encoding])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.0
|
2017-02-21 23:38:42 +01:00
|
|
|
|
changes:
|
2018-10-03 01:01:19 +02:00
|
|
|
|
- version: v11.0.0
|
2018-09-20 05:04:47 +02:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/22969
|
|
|
|
|
description: Throws `ERR_OUT_OF_RANGE` instead of `ERR_INDEX_OUT_OF_RANGE`.
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-02-14 23:42:57 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18790
|
|
|
|
|
description: Negative `end` values throw an `ERR_INDEX_OUT_OF_RANGE` error.
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-13 06:30:28 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18129
|
|
|
|
|
description: Attempting to fill a non-zero length buffer with a zero length
|
|
|
|
|
buffer triggers a thrown exception.
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-17 02:13:26 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/17427
|
|
|
|
|
description: Specifying an invalid string for `value` triggers a thrown
|
|
|
|
|
exception.
|
|
|
|
|
- version: v5.7.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/4935
|
|
|
|
|
description: The `encoding` parameter is supported now.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2019-03-31 10:02:42 +02:00
|
|
|
|
* `value` {string|Buffer|Uint8Array|integer} The value with which to fill `buf`.
|
2018-04-06 04:29:32 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to fill `buf`.
|
|
|
|
|
**Default:** `0`.
|
|
|
|
|
* `end` {integer} Where to stop filling `buf` (not inclusive). **Default:**
|
2019-03-31 10:37:33 +02:00
|
|
|
|
[`buf.length`][].
|
2018-04-06 04:29:32 +02:00
|
|
|
|
* `encoding` {string} The encoding for `value` if `value` is a string.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
**Default:** `'utf8'`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {Buffer} A reference to `buf`.
|
2010-10-28 14:18:16 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Fills `buf` with the specified `value`. If the `offset` and `end` are not given,
|
2018-04-06 04:29:32 +02:00
|
|
|
|
the entire `buf` will be filled:
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Fill a `Buffer` with the ASCII character 'h'.
|
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const b = Buffer.allocUnsafe(50).fill('h');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(b.toString());
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-01-23 00:44:13 +01:00
|
|
|
|
|
2019-01-17 12:09:02 +01:00
|
|
|
|
`value` is coerced to a `uint32` value if it is not a string, `Buffer`, or
|
|
|
|
|
integer. If the resulting integer is greater than `255` (decimal), `buf` will be
|
2019-01-19 19:45:06 +01:00
|
|
|
|
filled with `value & 255`.
|
2016-01-27 00:37:31 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
If the final write of a `fill()` operation falls on a multi-byte character,
|
2018-04-06 04:29:32 +02:00
|
|
|
|
then only the bytes of that character that fit into `buf` are written:
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-27 00:37:31 +01:00
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Fill a `Buffer` with character that takes up two bytes in UTF-8.
|
2018-03-25 00:33:11 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(Buffer.allocUnsafe(5).fill('\u0222'));
|
|
|
|
|
// Prints: <Buffer c8 a2 c8 a2 c8>
|
2016-01-27 00:37:31 +01:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-02 16:28:35 +01:00
|
|
|
|
If `value` contains invalid characters, it is truncated; if no valid
|
2017-12-02 16:04:50 +01:00
|
|
|
|
fill data remains, an exception is thrown:
|
2017-12-02 16:28:06 +01:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.allocUnsafe(5);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
|
2017-12-02 16:28:06 +01:00
|
|
|
|
console.log(buf.fill('a'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 61 61 61 61 61>
|
2017-12-02 16:28:06 +01:00
|
|
|
|
console.log(buf.fill('aazz', 'hex'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer aa aa aa aa aa>
|
2017-12-02 16:28:06 +01:00
|
|
|
|
console.log(buf.fill('zz', 'hex'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Throws an exception.
|
2017-12-02 16:28:06 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.includes(value[, byteOffset][, encoding])`
|
2017-02-13 03:49:35 +01:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v5.3.0
|
|
|
|
|
-->
|
|
|
|
|
|
2019-03-31 10:02:42 +02:00
|
|
|
|
* `value` {string|Buffer|Uint8Array|integer} What to search for.
|
2019-03-31 19:26:59 +02:00
|
|
|
|
* `byteOffset` {integer} Where to begin searching in `buf`. If negative, then
|
|
|
|
|
offset is calculated from the end of `buf`. **Default:** `0`.
|
2017-02-04 16:15:33 +01:00
|
|
|
|
* `encoding` {string} If `value` is a string, this is its encoding.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
**Default:** `'utf8'`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {boolean} `true` if `value` was found in `buf`, `false` otherwise.
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
|
|
|
|
Equivalent to [`buf.indexOf() !== -1`][`buf.indexOf()`].
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from('this is a buffer');
|
|
|
|
|
|
|
|
|
|
console.log(buf.includes('this'));
|
|
|
|
|
// Prints: true
|
|
|
|
|
console.log(buf.includes('is'));
|
|
|
|
|
// Prints: true
|
|
|
|
|
console.log(buf.includes(Buffer.from('a buffer')));
|
|
|
|
|
// Prints: true
|
|
|
|
|
console.log(buf.includes(97));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: true (97 is the decimal ASCII value for 'a')
|
2017-02-13 03:49:35 +01:00
|
|
|
|
console.log(buf.includes(Buffer.from('a buffer example')));
|
|
|
|
|
// Prints: false
|
2018-02-12 23:24:54 +01:00
|
|
|
|
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
|
|
|
|
|
// Prints: true
|
2017-02-13 03:49:35 +01:00
|
|
|
|
console.log(buf.includes('this', 4));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: false
|
2017-02-13 03:49:35 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.indexOf(value[, byteOffset][, encoding])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v1.5.0
|
2017-02-21 23:38:42 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The `value` can now be a `Uint8Array`.
|
2017-02-21 23:38:42 +01:00
|
|
|
|
- version: v5.7.0, v4.4.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/4803
|
|
|
|
|
description: When `encoding` is being passed, the `byteOffset` parameter
|
|
|
|
|
is no longer required.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2015-01-23 00:44:13 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {string|Buffer|Uint8Array|integer} What to search for.
|
2019-03-31 19:26:59 +02:00
|
|
|
|
* `byteOffset` {integer} Where to begin searching in `buf`. If negative, then
|
|
|
|
|
offset is calculated from the end of `buf`. **Default:** `0`.
|
2018-04-10 00:43:29 +02:00
|
|
|
|
* `encoding` {string} If `value` is a string, this is the encoding used to
|
|
|
|
|
determine the binary representation of the string that will be searched for in
|
|
|
|
|
`buf`. **Default:** `'utf8'`.
|
|
|
|
|
* Returns: {integer} The index of the first occurrence of `value` in `buf`, or
|
2018-04-07 06:20:51 +02:00
|
|
|
|
`-1` if `buf` does not contain `value`.
|
2015-01-23 00:44:13 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
If `value` is:
|
|
|
|
|
|
2019-09-01 08:08:20 +02:00
|
|
|
|
* a string, `value` is interpreted according to the character encoding in
|
|
|
|
|
`encoding`.
|
|
|
|
|
* a `Buffer` or [`Uint8Array`][], `value` will be used in its entirety.
|
|
|
|
|
To compare a partial `Buffer`, use [`buf.slice()`][].
|
|
|
|
|
* a number, `value` will be interpreted as an unsigned 8-bit integer
|
2016-07-20 00:57:50 +02:00
|
|
|
|
value between `0` and `255`.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from('this is a buffer');
|
2016-01-17 18:39:07 +01:00
|
|
|
|
|
2016-11-26 21:59:15 +01:00
|
|
|
|
console.log(buf.indexOf('this'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 0
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.indexOf('is'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 2
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.indexOf(Buffer.from('a buffer')));
|
|
|
|
|
// Prints: 8
|
|
|
|
|
console.log(buf.indexOf(97));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 8 (97 is the decimal ASCII value for 'a')
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.indexOf(Buffer.from('a buffer example')));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: -1
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 8
|
2016-01-21 17:53:47 +01:00
|
|
|
|
|
2018-03-30 07:41:41 +02:00
|
|
|
|
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
|
2016-01-21 17:53:47 +01:00
|
|
|
|
|
2018-03-30 07:41:41 +02:00
|
|
|
|
console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 4
|
2018-03-30 07:41:41 +02:00
|
|
|
|
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 6
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-01-23 00:44:13 +01:00
|
|
|
|
|
2016-12-07 09:36:16 +01:00
|
|
|
|
If `value` is not a string, number, or `Buffer`, this method will throw a
|
|
|
|
|
`TypeError`. If `value` is a number, it will be coerced to a valid byte value,
|
|
|
|
|
an integer between 0 and 255.
|
|
|
|
|
|
2018-04-07 06:20:51 +02:00
|
|
|
|
If `byteOffset` is not a number, it will be coerced to a number. If the result
|
|
|
|
|
of coercion is `NaN` or `0`, then the entire buffer will be searched. This
|
2019-03-31 10:37:33 +02:00
|
|
|
|
behavior matches [`String#indexOf()`][].
|
2016-12-07 09:36:16 +01:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const b = Buffer.from('abcdef');
|
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Passing a value that's a number, but not a valid byte.
|
|
|
|
|
// Prints: 2, equivalent to searching for 99 or 'c'.
|
2016-12-07 09:36:16 +01:00
|
|
|
|
console.log(b.indexOf(99.9));
|
|
|
|
|
console.log(b.indexOf(256 + 99));
|
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Passing a byteOffset that coerces to NaN or 0.
|
|
|
|
|
// Prints: 1, searching the whole buffer.
|
2016-12-07 09:36:16 +01:00
|
|
|
|
console.log(b.indexOf('b', undefined));
|
|
|
|
|
console.log(b.indexOf('b', {}));
|
|
|
|
|
console.log(b.indexOf('b', null));
|
|
|
|
|
console.log(b.indexOf('b', []));
|
|
|
|
|
```
|
|
|
|
|
|
2017-05-14 19:57:52 +02:00
|
|
|
|
If `value` is an empty string or empty `Buffer` and `byteOffset` is less
|
|
|
|
|
than `buf.length`, `byteOffset` will be returned. If `value` is empty and
|
|
|
|
|
`byteOffset` is at least `buf.length`, `buf.length` will be returned.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.keys()`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v1.1.0
|
|
|
|
|
-->
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
2016-11-11 21:29:01 +01:00
|
|
|
|
* Returns: {Iterator}
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Creates and returns an [iterator][] of `buf` keys (indices).
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from('buffer');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2018-02-12 23:24:54 +01:00
|
|
|
|
for (const key of buf.keys()) {
|
|
|
|
|
console.log(key);
|
|
|
|
|
}
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints:
|
2016-01-26 04:05:43 +01:00
|
|
|
|
// 0
|
|
|
|
|
// 1
|
|
|
|
|
// 2
|
|
|
|
|
// 3
|
|
|
|
|
// 4
|
|
|
|
|
// 5
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.lastIndexOf(value[, byteOffset][, encoding])`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v6.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The `value` can now be a `Uint8Array`.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2016-01-28 22:12:09 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {string|Buffer|Uint8Array|integer} What to search for.
|
2019-03-31 19:26:59 +02:00
|
|
|
|
* `byteOffset` {integer} Where to begin searching in `buf`. If negative, then
|
|
|
|
|
offset is calculated from the end of `buf`. **Default:**
|
2019-10-02 07:18:17 +02:00
|
|
|
|
`buf.length - 1`.
|
2018-04-10 00:43:29 +02:00
|
|
|
|
* `encoding` {string} If `value` is a string, this is the encoding used to
|
|
|
|
|
determine the binary representation of the string that will be searched for in
|
|
|
|
|
`buf`. **Default:** `'utf8'`.
|
|
|
|
|
* Returns: {integer} The index of the last occurrence of `value` in `buf`, or
|
|
|
|
|
`-1` if `buf` does not contain `value`.
|
2016-01-28 22:12:09 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Identical to [`buf.indexOf()`][], except the last occurrence of `value` is found
|
2018-04-10 00:43:29 +02:00
|
|
|
|
rather than the first occurrence.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-28 22:12:09 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from('this buffer is a buffer');
|
|
|
|
|
|
|
|
|
|
console.log(buf.lastIndexOf('this'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 0
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.lastIndexOf('buffer'));
|
|
|
|
|
// Prints: 17
|
|
|
|
|
console.log(buf.lastIndexOf(Buffer.from('buffer')));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 17
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.lastIndexOf(97));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 15 (97 is the decimal ASCII value for 'a')
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.lastIndexOf(Buffer.from('yolo')));
|
|
|
|
|
// Prints: -1
|
2018-02-12 23:24:54 +01:00
|
|
|
|
console.log(buf.lastIndexOf('buffer', 5));
|
|
|
|
|
// Prints: 5
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.lastIndexOf('buffer', 4));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: -1
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2018-03-30 07:41:41 +02:00
|
|
|
|
const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2018-03-30 07:41:41 +02:00
|
|
|
|
console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 6
|
2018-03-30 07:41:41 +02:00
|
|
|
|
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 4
|
2016-01-28 22:12:09 +01:00
|
|
|
|
```
|
|
|
|
|
|
2016-12-07 09:36:16 +01:00
|
|
|
|
If `value` is not a string, number, or `Buffer`, this method will throw a
|
|
|
|
|
`TypeError`. If `value` is a number, it will be coerced to a valid byte value,
|
|
|
|
|
an integer between 0 and 255.
|
|
|
|
|
|
|
|
|
|
If `byteOffset` is not a number, it will be coerced to a number. Any arguments
|
|
|
|
|
that coerce to `NaN`, like `{}` or `undefined`, will search the whole buffer.
|
2019-03-31 10:37:33 +02:00
|
|
|
|
This behavior matches [`String#lastIndexOf()`][].
|
2016-12-07 09:36:16 +01:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const b = Buffer.from('abcdef');
|
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Passing a value that's a number, but not a valid byte.
|
|
|
|
|
// Prints: 2, equivalent to searching for 99 or 'c'.
|
2016-12-07 09:36:16 +01:00
|
|
|
|
console.log(b.lastIndexOf(99.9));
|
|
|
|
|
console.log(b.lastIndexOf(256 + 99));
|
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Passing a byteOffset that coerces to NaN.
|
|
|
|
|
// Prints: 1, searching the whole buffer.
|
2016-12-07 09:36:16 +01:00
|
|
|
|
console.log(b.lastIndexOf('b', undefined));
|
|
|
|
|
console.log(b.lastIndexOf('b', {}));
|
|
|
|
|
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Passing a byteOffset that coerces to 0.
|
|
|
|
|
// Prints: -1, equivalent to passing 0.
|
2016-12-07 09:36:16 +01:00
|
|
|
|
console.log(b.lastIndexOf('b', null));
|
|
|
|
|
console.log(b.lastIndexOf('b', []));
|
|
|
|
|
```
|
|
|
|
|
|
2017-05-14 19:57:52 +02:00
|
|
|
|
If `value` is an empty string or empty `Buffer`, `byteOffset` will be returned.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.length`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.1.90
|
|
|
|
|
-->
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* {integer}
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Returns the number of bytes in `buf`.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2020-03-04 14:06:56 +01:00
|
|
|
|
// Create a `Buffer` and write a shorter string to it using UTF-8.
|
2018-03-25 00:33:11 +01:00
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.alloc(1234);
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf.length);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1234
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
buf.write('some string', 0, 'utf8');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf.length);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1234
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.parent`
|
2017-02-22 00:10:25 +01:00
|
|
|
|
<!-- YAML
|
2017-03-16 04:26:14 +01:00
|
|
|
|
deprecated: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
-->
|
2017-01-10 20:30:46 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
> Stability: 0 - Deprecated: Use [`buf.buffer`][] instead.
|
2017-01-10 20:30:46 +01:00
|
|
|
|
|
|
|
|
|
The `buf.parent` property is a deprecated alias for `buf.buffer`.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readBigInt64BE([offset])`
|
|
|
|
|
### `buf.readBigInt64LE([offset])`
|
2018-06-03 19:30:46 +02:00
|
|
|
|
<!-- YAML
|
2019-03-22 14:19:46 +01:00
|
|
|
|
added: v12.0.0
|
2018-06-03 19:30:46 +02:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
|
|
|
|
satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`.
|
|
|
|
|
* Returns: {bigint}
|
|
|
|
|
|
|
|
|
|
Reads a signed 64-bit integer from `buf` at the specified `offset` with
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the specified [endianness][] (`readBigInt64BE()` reads as big endian,
|
|
|
|
|
`readBigInt64LE()` reads as little endian).
|
2018-06-03 19:30:46 +02:00
|
|
|
|
|
|
|
|
|
Integers read from a `Buffer` are interpreted as two's complement signed values.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readBigUInt64BE([offset])`
|
|
|
|
|
### `buf.readBigUInt64LE([offset])`
|
2018-06-03 19:30:46 +02:00
|
|
|
|
<!-- YAML
|
2019-03-22 14:19:46 +01:00
|
|
|
|
added: v12.0.0
|
2018-06-03 19:30:46 +02:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
|
|
|
|
satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`.
|
|
|
|
|
* Returns: {bigint}
|
|
|
|
|
|
|
|
|
|
Reads an unsigned 64-bit integer from `buf` at the specified `offset` with
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the specified [endianness][] (`readBigUInt64BE()` reads as big endian,
|
|
|
|
|
`readBigUInt64LE()` reads as little endian).
|
2018-06-03 19:30:46 +02:00
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
|
|
|
|
|
|
|
|
|
|
console.log(buf.readBigUInt64BE(0));
|
|
|
|
|
// Prints: 4294967295n
|
|
|
|
|
|
|
|
|
|
console.log(buf.readBigUInt64LE(0));
|
|
|
|
|
// Prints: 18446744069414584320n
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readDoubleBE([offset])`
|
|
|
|
|
### `buf.readDoubleLE([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 8`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {number}
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Reads a 64-bit double from `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`readDoubleBE()` reads as big endian, `readDoubleLE()` reads as
|
2015-12-20 17:57:03 +01:00
|
|
|
|
little endian).
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
|
|
|
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readDoubleBE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 8.20788039913184e-304
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readDoubleLE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 5.447603722011605e-270
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readDoubleLE(1));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readFloatBE([offset])`
|
|
|
|
|
### `buf.readFloatLE([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {number}
|
2011-08-08 22:26:00 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Reads a 32-bit float from `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`readFloatBE()` reads as big endian, `readFloatLE()` reads as
|
2015-12-20 17:57:03 +01:00
|
|
|
|
little endian).
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([1, 2, 3, 4]);
|
|
|
|
|
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readFloatBE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 2.387939260590663e-38
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readFloatLE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1.539989614439558e-36
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readFloatLE(1));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readInt8([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 1`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads a signed 8-bit integer from `buf` at the specified `offset`.
|
|
|
|
|
|
|
|
|
|
Integers read from a `Buffer` are interpreted as two's complement signed values.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([-1, 5]);
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readInt8(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: -1
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readInt8(1));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 5
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readInt8(2));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readInt16BE([offset])`
|
|
|
|
|
### `buf.readInt16LE([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads a signed 16-bit integer from `buf` at the specified `offset` with
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the specified [endianness][] (`readInt16BE()` reads as big endian,
|
|
|
|
|
`readInt16LE()` reads as little endian).
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Integers read from a `Buffer` are interpreted as two's complement signed values.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0, 5]);
|
|
|
|
|
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readInt16BE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readInt16LE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1280
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readInt16LE(1));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readInt32BE([offset])`
|
|
|
|
|
### `buf.readInt32LE([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads a signed 32-bit integer from `buf` at the specified `offset` with
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the specified [endianness][] (`readInt32BE()` reads as big endian,
|
|
|
|
|
`readInt32LE()` reads as little endian).
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Integers read from a `Buffer` are interpreted as two's complement signed values.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0, 0, 0, 5]);
|
|
|
|
|
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readInt32BE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
console.log(buf.readInt32LE(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 83886080
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readInt32LE(1));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readIntBE(offset, byteLength)`
|
|
|
|
|
### `buf.readIntLE(offset, byteLength)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2016-07-20 01:07:19 +02:00
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
and `byteLength` to `uint32` anymore.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
|
|
|
|
satisfy `0 <= offset <= buf.length - byteLength`.
|
|
|
|
|
* `byteLength` {integer} Number of bytes to read. Must satisfy
|
|
|
|
|
`0 < byteLength <= 6`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads `byteLength` number of bytes from `buf` at the specified `offset`
|
2015-12-20 17:57:03 +01:00
|
|
|
|
and interprets the result as a two's complement signed value. Supports up to 48
|
2016-07-20 00:57:50 +02:00
|
|
|
|
bits of accuracy.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
|
|
|
|
|
|
|
|
|
|
console.log(buf.readIntLE(0, 6).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: -546f87a9cbee
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readIntBE(0, 6).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1234567890ab
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readIntBE(1, 6).toString(16));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2017-02-03 16:05:28 +01:00
|
|
|
|
console.log(buf.readIntBE(1, 0).toString(16));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readUInt8([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 1`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2011-08-08 22:26:00 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads an unsigned 8-bit integer from `buf` at the specified `offset`.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([1, -2]);
|
|
|
|
|
|
|
|
|
|
console.log(buf.readUInt8(0));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt8(1));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 254
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt8(2));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readUInt16BE([offset])`
|
|
|
|
|
### `buf.readUInt16LE([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads an unsigned 16-bit integer from `buf` at the specified `offset` with
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the specified [endianness][] (`readUInt16BE()` reads as big endian, `readUInt16LE()`
|
|
|
|
|
reads as little endian).
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0x12, 0x34, 0x56]);
|
|
|
|
|
|
|
|
|
|
console.log(buf.readUInt16BE(0).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1234
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt16LE(0).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 3412
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt16BE(1).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 3456
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt16LE(1).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 5634
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt16LE(2).toString(16));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readUInt32BE([offset])`
|
|
|
|
|
### `buf.readUInt32LE([offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads an unsigned 32-bit integer from `buf` at the specified `offset` with
|
2020-03-04 14:06:56 +01:00
|
|
|
|
the specified [endianness][] (`readUInt32BE()` reads as big endian,
|
|
|
|
|
`readUInt32LE()` reads as little endian).
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);
|
|
|
|
|
|
|
|
|
|
console.log(buf.readUInt32BE(0).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 12345678
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt32LE(0).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 78563412
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUInt32LE(1).toString(16));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.readUIntBE(offset, byteLength)`
|
|
|
|
|
### `buf.readUIntLE(offset, byteLength)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2016-07-20 01:07:19 +02:00
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
and `byteLength` to `uint32` anymore.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to read. Must
|
|
|
|
|
satisfy `0 <= offset <= buf.length - byteLength`.
|
|
|
|
|
* `byteLength` {integer} Number of bytes to read. Must satisfy
|
|
|
|
|
`0 < byteLength <= 6`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {integer}
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Reads `byteLength` number of bytes from `buf` at the specified `offset`
|
2015-12-20 17:57:03 +01:00
|
|
|
|
and interprets the result as an unsigned integer. Supports up to 48
|
2016-07-20 00:57:50 +02:00
|
|
|
|
bits of accuracy.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);
|
|
|
|
|
|
2016-08-23 19:50:28 +02:00
|
|
|
|
console.log(buf.readUIntBE(0, 6).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 1234567890ab
|
2016-08-23 19:50:28 +02:00
|
|
|
|
console.log(buf.readUIntLE(0, 6).toString(16));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: ab9078563412
|
2016-07-19 23:57:04 +02:00
|
|
|
|
console.log(buf.readUIntBE(1, 6).toString(16));
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_OUT_OF_RANGE.
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.subarray([start[, end]])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
2019-06-06 15:43:22 +02:00
|
|
|
|
added: v3.0.0
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2018-04-02 03:44:32 +02:00
|
|
|
|
* `start` {integer} Where the new `Buffer` will start. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `end` {integer} Where the new `Buffer` will end (not inclusive).
|
2019-03-31 10:37:33 +02:00
|
|
|
|
**Default:** [`buf.length`][].
|
2016-11-11 21:29:01 +01:00
|
|
|
|
* Returns: {Buffer}
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Returns a new `Buffer` that references the same memory as the original, but
|
2016-01-26 04:05:43 +01:00
|
|
|
|
offset and cropped by the `start` and `end` indices.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Specifying `end` greater than [`buf.length`][] will return the same result as
|
|
|
|
|
that of `end` equal to [`buf.length`][].
|
2017-08-09 22:16:14 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
This method is inherited from [`TypedArray#subarray()`][].
|
|
|
|
|
|
2018-02-06 06:55:16 +01:00
|
|
|
|
Modifying the new `Buffer` slice will modify the memory in the original `Buffer`
|
|
|
|
|
because the allocated memory of the two objects overlap.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-03-25 00:33:11 +01:00
|
|
|
|
// Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
|
|
|
|
|
// from the original `Buffer`.
|
|
|
|
|
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf1 = Buffer.allocUnsafe(26);
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2017-04-21 16:38:31 +02:00
|
|
|
|
for (let i = 0; i < 26; i++) {
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// 97 is the decimal ASCII value for 'a'.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
buf1[i] = i + 97;
|
2016-01-17 18:39:07 +01:00
|
|
|
|
}
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-06-06 15:43:22 +02:00
|
|
|
|
const buf2 = buf1.subarray(0, 3);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
console.log(buf2.toString('ascii', 0, buf2.length));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: abc
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf1[0] = 33;
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
console.log(buf2.toString('ascii', 0, buf2.length));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: !bc
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2015-12-20 17:57:03 +01:00
|
|
|
|
Specifying negative indexes causes the slice to be generated relative to the
|
2016-07-20 00:57:50 +02:00
|
|
|
|
end of `buf` rather than the beginning.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from('buffer');
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-06-06 15:43:22 +02:00
|
|
|
|
console.log(buf.subarray(-6, -1).toString());
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: buffe
|
2019-06-06 15:43:22 +02:00
|
|
|
|
// (Equivalent to buf.subarray(0, 5).)
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2019-06-06 15:43:22 +02:00
|
|
|
|
console.log(buf.subarray(-6, -2).toString());
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: buff
|
2019-06-06 15:43:22 +02:00
|
|
|
|
// (Equivalent to buf.subarray(0, 4).)
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2019-06-06 15:43:22 +02:00
|
|
|
|
console.log(buf.subarray(-5, -2).toString());
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints: uff
|
2019-06-06 15:43:22 +02:00
|
|
|
|
// (Equivalent to buf.subarray(1, 4).)
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.slice([start[, end]])`
|
2019-06-06 15:43:22 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.3.0
|
|
|
|
|
changes:
|
|
|
|
|
- version: v7.1.0, v6.9.2
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9341
|
|
|
|
|
description: Coercing the offsets to integers now handles values outside
|
|
|
|
|
the 32-bit integer range properly.
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9101
|
|
|
|
|
description: All offsets are now coerced to integers before doing any
|
|
|
|
|
calculations with them.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `start` {integer} Where the new `Buffer` will start. **Default:** `0`.
|
|
|
|
|
* `end` {integer} Where the new `Buffer` will end (not inclusive).
|
|
|
|
|
**Default:** [`buf.length`][].
|
|
|
|
|
* Returns: {Buffer}
|
|
|
|
|
|
|
|
|
|
Returns a new `Buffer` that references the same memory as the original, but
|
|
|
|
|
offset and cropped by the `start` and `end` indices.
|
|
|
|
|
|
|
|
|
|
This is the same behavior as `buf.subarray()`.
|
|
|
|
|
|
|
|
|
|
This method is not compatible with the `Uint8Array.prototype.slice()`,
|
|
|
|
|
which is a superclass of `Buffer`. To copy the slice, use
|
|
|
|
|
`Uint8Array.prototype.slice()`.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from('buffer');
|
|
|
|
|
|
|
|
|
|
const copiedBuf = Uint8Array.prototype.slice.call(buf);
|
|
|
|
|
copiedBuf[0]++;
|
|
|
|
|
console.log(copiedBuf.toString());
|
|
|
|
|
// Prints: cuffer
|
|
|
|
|
|
|
|
|
|
console.log(buf.toString());
|
|
|
|
|
// Prints: buffer
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.swap16()`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v5.10.0
|
|
|
|
|
-->
|
2016-03-15 19:08:32 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {Buffer} A reference to `buf`.
|
2016-03-15 19:08:32 +01:00
|
|
|
|
|
2018-04-12 20:10:46 +02:00
|
|
|
|
Interprets `buf` as an array of unsigned 16-bit integers and swaps the
|
2019-03-31 10:37:33 +02:00
|
|
|
|
byte order *in-place*. Throws [`ERR_INVALID_BUFFER_SIZE`][] if [`buf.length`][]
|
|
|
|
|
is not a multiple of 2.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-03-15 19:08:32 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
|
|
|
|
|
|
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 01 02 03 04 05 06 07 08>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
buf1.swap16();
|
|
|
|
|
|
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 02 01 04 03 06 05 08 07>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
|
|
|
|
|
|
2016-11-26 22:08:40 +01:00
|
|
|
|
buf2.swap16();
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_INVALID_BUFFER_SIZE.
|
2016-03-15 19:08:32 +01:00
|
|
|
|
```
|
|
|
|
|
|
2018-10-19 03:22:46 +02:00
|
|
|
|
One convenient use of `buf.swap16()` is to perform a fast in-place conversion
|
|
|
|
|
between UTF-16 little-endian and UTF-16 big-endian:
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
|
|
|
|
|
buf.swap16(); // Convert to big-endian UTF-16 text.
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.swap32()`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v5.10.0
|
|
|
|
|
-->
|
2016-03-15 19:08:32 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {Buffer} A reference to `buf`.
|
2016-03-15 19:08:32 +01:00
|
|
|
|
|
2018-04-12 20:10:46 +02:00
|
|
|
|
Interprets `buf` as an array of unsigned 32-bit integers and swaps the
|
2019-03-31 10:37:33 +02:00
|
|
|
|
byte order *in-place*. Throws [`ERR_INVALID_BUFFER_SIZE`][] if [`buf.length`][]
|
|
|
|
|
is not a multiple of 4.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-03-15 19:08:32 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
|
|
|
|
|
|
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 01 02 03 04 05 06 07 08>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
buf1.swap32();
|
|
|
|
|
|
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 04 03 02 01 08 07 06 05>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
|
|
|
|
|
|
|
|
|
|
buf2.swap32();
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_INVALID_BUFFER_SIZE.
|
2016-03-15 19:08:32 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.swap64()`
|
2016-06-04 22:38:08 +02:00
|
|
|
|
<!-- YAML
|
2016-07-06 17:38:58 +02:00
|
|
|
|
added: v6.3.0
|
2016-06-04 22:38:08 +02:00
|
|
|
|
-->
|
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {Buffer} A reference to `buf`.
|
2016-06-04 22:38:08 +02:00
|
|
|
|
|
2018-04-12 07:46:48 +02:00
|
|
|
|
Interprets `buf` as an array of 64-bit numbers and swaps byte order *in-place*.
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Throws [`ERR_INVALID_BUFFER_SIZE`][] if [`buf.length`][] is not a multiple of 8.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-06-04 22:38:08 +02:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);
|
|
|
|
|
|
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 01 02 03 04 05 06 07 08>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
buf1.swap64();
|
|
|
|
|
|
|
|
|
|
console.log(buf1);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 08 07 06 05 04 03 02 01>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
const buf2 = Buffer.from([0x1, 0x2, 0x3]);
|
|
|
|
|
|
|
|
|
|
buf2.swap64();
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// Throws ERR_INVALID_BUFFER_SIZE.
|
2016-06-04 22:38:08 +02:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.toJSON()`
|
2017-02-13 03:49:35 +01:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.9.2
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* Returns: {Object}
|
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Returns a JSON representation of `buf`. [`JSON.stringify()`][] implicitly calls
|
2017-02-13 03:49:35 +01:00
|
|
|
|
this function when stringifying a `Buffer` instance.
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
`Buffer.from()` accepts objects in the format returned from this method.
|
|
|
|
|
In particular, `Buffer.from(buf.toJSON())` works like `Buffer.from(buf)`.
|
|
|
|
|
|
2017-02-13 03:49:35 +01:00
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
|
|
|
|
|
const json = JSON.stringify(buf);
|
|
|
|
|
|
|
|
|
|
console.log(json);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}
|
2017-02-13 03:49:35 +01:00
|
|
|
|
|
|
|
|
|
const copy = JSON.parse(json, (key, value) => {
|
2017-04-21 16:38:31 +02:00
|
|
|
|
return value && value.type === 'Buffer' ?
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Buffer.from(value) :
|
2017-04-21 16:38:31 +02:00
|
|
|
|
value;
|
2017-02-13 03:49:35 +01:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
console.log(copy);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 01 02 03 04 05>
|
2017-02-13 03:49:35 +01:00
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.toString([encoding[, start[, end]]])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.1.90
|
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2018-04-14 23:53:08 +02:00
|
|
|
|
* `encoding` {string} The character encoding to use. **Default:** `'utf8'`.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
* `start` {integer} The byte offset to start decoding at. **Default:** `0`.
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* `end` {integer} The byte offset to stop decoding at (not inclusive).
|
2019-03-31 10:37:33 +02:00
|
|
|
|
**Default:** [`buf.length`][].
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* Returns: {string}
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-10-08 16:46:52 +02:00
|
|
|
|
Decodes `buf` to a string according to the specified character encoding in
|
|
|
|
|
`encoding`. `start` and `end` may be passed to decode only a subset of `buf`.
|
2020-03-04 14:06:56 +01:00
|
|
|
|
|
|
|
|
|
If `encoding` is `'utf8'` and a byte sequence in the input is not valid UTF-8,
|
|
|
|
|
then each invalid byte is replaced with the replacement character `U+FFFD`.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2017-06-05 11:58:20 +02:00
|
|
|
|
The maximum length of a string instance (in UTF-16 code units) is available
|
|
|
|
|
as [`buffer.constants.MAX_STRING_LENGTH`][].
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf1 = Buffer.allocUnsafe(26);
|
|
|
|
|
|
2017-04-21 16:38:31 +02:00
|
|
|
|
for (let i = 0; i < 26; i++) {
|
2019-03-30 18:59:44 +01:00
|
|
|
|
// 97 is the decimal ASCII value for 'a'.
|
2016-07-19 23:57:04 +02:00
|
|
|
|
buf1[i] = i + 97;
|
2016-01-17 18:39:07 +01:00
|
|
|
|
}
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(buf1.toString('utf8'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: abcdefghijklmnopqrstuvwxyz
|
2020-03-04 14:06:56 +01:00
|
|
|
|
console.log(buf1.toString('utf8', 0, 5));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: abcde
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
const buf2 = Buffer.from('tést');
|
|
|
|
|
|
2016-10-08 16:46:52 +02:00
|
|
|
|
console.log(buf2.toString('hex'));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 74c3a97374
|
2016-10-08 16:46:52 +02:00
|
|
|
|
console.log(buf2.toString('utf8', 0, 3));
|
|
|
|
|
// Prints: té
|
|
|
|
|
console.log(buf2.toString(undefined, 0, 3));
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: té
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.values()`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v1.1.0
|
|
|
|
|
-->
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
2016-11-11 21:29:01 +01:00
|
|
|
|
* Returns: {Iterator}
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
Creates and returns an [iterator][] for `buf` values (bytes). This function is
|
2016-07-20 00:38:00 +02:00
|
|
|
|
called automatically when a `Buffer` is used in a `for..of` statement.
|
2016-01-26 04:05:43 +01:00
|
|
|
|
|
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.from('buffer');
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2018-02-12 23:24:54 +01:00
|
|
|
|
for (const value of buf.values()) {
|
|
|
|
|
console.log(value);
|
|
|
|
|
}
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints:
|
2016-01-26 04:05:43 +01:00
|
|
|
|
// 98
|
|
|
|
|
// 117
|
|
|
|
|
// 102
|
|
|
|
|
// 102
|
|
|
|
|
// 101
|
|
|
|
|
// 114
|
2018-02-12 23:24:54 +01:00
|
|
|
|
|
|
|
|
|
for (const value of buf) {
|
2016-01-26 04:05:43 +01:00
|
|
|
|
console.log(value);
|
|
|
|
|
}
|
2016-07-19 23:57:04 +02:00
|
|
|
|
// Prints:
|
2016-01-26 04:05:43 +01:00
|
|
|
|
// 98
|
|
|
|
|
// 117
|
|
|
|
|
// 102
|
|
|
|
|
// 102
|
|
|
|
|
// 101
|
|
|
|
|
// 114
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.write(string[, offset[, length]][, encoding])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.1.90
|
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2018-04-18 00:39:28 +02:00
|
|
|
|
* `string` {string} String to write to `buf`.
|
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write `string`.
|
|
|
|
|
**Default:** `0`.
|
2020-03-04 14:06:56 +01:00
|
|
|
|
* `length` {integer} Maximum number of bytes to write. **Default:**
|
2018-04-18 00:39:28 +02:00
|
|
|
|
`buf.length - offset`.
|
2018-04-02 03:44:32 +02:00
|
|
|
|
* `encoding` {string} The character encoding of `string`. **Default:** `'utf8'`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} Number of bytes written.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2018-04-18 00:39:28 +02:00
|
|
|
|
Writes `string` to `buf` at `offset` according to the character encoding in
|
|
|
|
|
`encoding`. The `length` parameter is the number of bytes to write. If `buf` did
|
|
|
|
|
not contain enough space to fit the entire string, only part of `string` will be
|
|
|
|
|
written. However, partially encoded characters will not be written.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2018-04-18 00:39:28 +02:00
|
|
|
|
const buf = Buffer.alloc(256);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
const len = buf.write('\u00bd + \u00bc = \u00be', 0);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: 12 bytes: ½ + ¼ = ¾
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeBigInt64BE(value[, offset])`
|
|
|
|
|
### `buf.writeBigInt64LE(value[, offset])`
|
2018-06-03 19:30:46 +02:00
|
|
|
|
<!-- YAML
|
2019-03-22 14:19:46 +01:00
|
|
|
|
added: v12.0.0
|
2018-06-03 19:30:46 +02:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `value` {bigint} Number to be written to `buf`.
|
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
|
|
|
|
satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`.
|
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`writeBigInt64BE()` writes as big endian, `writeBigInt64LE()`
|
|
|
|
|
writes as little endian).
|
2018-06-03 19:30:46 +02:00
|
|
|
|
|
|
|
|
|
`value` is interpreted and written as a two's complement signed integer.
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.allocUnsafe(8);
|
|
|
|
|
|
|
|
|
|
buf.writeBigInt64BE(0x0102030405060708n, 0);
|
|
|
|
|
|
|
|
|
|
console.log(buf);
|
|
|
|
|
// Prints: <Buffer 01 02 03 04 05 06 07 08>
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeBigUInt64BE(value[, offset])`
|
|
|
|
|
### `buf.writeBigUInt64LE(value[, offset])`
|
2018-06-03 19:30:46 +02:00
|
|
|
|
<!-- YAML
|
2019-03-22 14:19:46 +01:00
|
|
|
|
added: v12.0.0
|
2018-06-03 19:30:46 +02:00
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
* `value` {bigint} Number to be written to `buf`.
|
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
|
|
|
|
satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`.
|
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with specified [endianness][]
|
|
|
|
|
(`writeBigUInt64BE()` writes as big endian, `writeBigUInt64LE()` writes as
|
2018-06-03 19:30:46 +02:00
|
|
|
|
little endian).
|
|
|
|
|
|
|
|
|
|
```js
|
|
|
|
|
const buf = Buffer.allocUnsafe(8);
|
|
|
|
|
|
|
|
|
|
buf.writeBigUInt64LE(0xdecafafecacefaden, 0);
|
|
|
|
|
|
|
|
|
|
console.log(buf);
|
|
|
|
|
// Prints: <Buffer de fa ce ca fe fa ca de>
|
|
|
|
|
```
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeDoubleBE(value[, offset])`
|
|
|
|
|
### `buf.writeDoubleLE(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {number} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 8`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`writeDoubleBE()` writes as big endian, `writeDoubleLE()` writes
|
|
|
|
|
as little endian). `value` must be a JavaScript number. Behavior is undefined
|
|
|
|
|
when `value` is anything other than a JavaScript number.
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(8);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2018-08-07 12:52:21 +02:00
|
|
|
|
buf.writeDoubleBE(123.456, 0);
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-08-07 12:52:21 +02:00
|
|
|
|
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2018-08-07 12:52:21 +02:00
|
|
|
|
buf.writeDoubleLE(123.456, 0);
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-08-07 12:52:21 +02:00
|
|
|
|
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeFloatBE(value[, offset])`
|
|
|
|
|
### `buf.writeFloatLE(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {number} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with specified [endianness][]
|
|
|
|
|
(`writeFloatBE()` writes as big endian, `writeFloatLE()` writes as little
|
|
|
|
|
endian). `value` must be a JavaScript number. Behavior is undefined when
|
|
|
|
|
`value` is anything other than a JavaScript number.
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(4);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeFloatBE(0xcafebabe, 0);
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 4f 4a fe bb>
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeFloatLE(0xcafebabe, 0);
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer bb fe 4a 4f>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeInt8(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 1`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset`. `value` must be a valid
|
2016-07-20 00:57:50 +02:00
|
|
|
|
signed 8-bit integer. Behavior is undefined when `value` is anything other than
|
|
|
|
|
a signed 8-bit integer.
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
`value` is interpreted and written as a two's complement signed integer.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(2);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeInt8(2, 0);
|
|
|
|
|
buf.writeInt8(-2, 1);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 02 fe>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeInt16BE(value[, offset])`
|
|
|
|
|
### `buf.writeInt16LE(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`writeInt16BE()` writes as big endian, `writeInt16LE()` writes
|
|
|
|
|
as little endian). `value` must be a valid signed 16-bit integer. Behavior is
|
2018-03-23 06:33:16 +01:00
|
|
|
|
undefined when `value` is anything other than a signed 16-bit integer.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
|
|
|
|
`value` is interpreted and written as a two's complement signed integer.
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(4);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
buf.writeInt16BE(0x0102, 0);
|
|
|
|
|
buf.writeInt16LE(0x0304, 2);
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 01 02 04 03>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeInt32BE(value[, offset])`
|
|
|
|
|
### `buf.writeInt32LE(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-01 20:38:10 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`writeInt32BE()` writes aS big endian, `writeInt32LE()` writes
|
|
|
|
|
as little endian). `value` must be a valid signed 32-bit integer. Behavior is
|
2018-03-23 06:33:16 +01:00
|
|
|
|
undefined when `value` is anything other than a signed 32-bit integer.
|
2016-07-20 00:57:50 +02:00
|
|
|
|
|
|
|
|
|
`value` is interpreted and written as a two's complement signed integer.
|
2011-08-09 06:40:10 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(8);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
buf.writeInt32BE(0x01020304, 0);
|
|
|
|
|
buf.writeInt32LE(0x05060708, 4);
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 01 02 03 04 08 07 06 05>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-06 22:42:55 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeIntBE(value, offset, byteLength)`
|
|
|
|
|
### `buf.writeIntLE(value, offset, byteLength)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
2016-07-20 01:07:19 +02:00
|
|
|
|
added: v0.11.15
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
and `byteLength` to `uint32` anymore.
|
2016-05-01 02:00:00 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
|
|
|
|
satisfy `0 <= offset <= buf.length - byteLength`.
|
|
|
|
|
* `byteLength` {integer} Number of bytes to write. Must satisfy
|
|
|
|
|
`0 < byteLength <= 6`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Writes `byteLength` bytes of `value` to `buf` at the specified `offset`.
|
|
|
|
|
Supports up to 48 bits of accuracy. Behavior is undefined when `value` is
|
|
|
|
|
anything other than a signed integer.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-07-19 23:57:04 +02:00
|
|
|
|
const buf = Buffer.allocUnsafe(6);
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2017-10-23 20:36:31 +02:00
|
|
|
|
buf.writeIntBE(0x1234567890ab, 0, 6);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 12 34 56 78 90 ab>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2017-10-23 20:36:31 +02:00
|
|
|
|
buf.writeIntLE(0x1234567890ab, 0, 6);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer ab 90 78 56 34 12>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-12-20 17:57:03 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeUInt8(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 1`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset`. `value` must be a
|
2016-07-20 00:57:50 +02:00
|
|
|
|
valid unsigned 8-bit integer. Behavior is undefined when `value` is anything
|
2016-03-27 17:34:13 +02:00
|
|
|
|
other than an unsigned 8-bit integer.
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(4);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeUInt8(0x3, 0);
|
|
|
|
|
buf.writeUInt8(0x4, 1);
|
|
|
|
|
buf.writeUInt8(0x23, 2);
|
|
|
|
|
buf.writeUInt8(0x42, 3);
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 03 04 23 42>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeUInt16BE(value[, offset])`
|
|
|
|
|
### `buf.writeUInt16LE(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`writeUInt16BE()` writes as big endian, `writeUInt16LE()` writes
|
|
|
|
|
as little endian). `value` must be a valid unsigned 16-bit integer. Behavior is
|
2016-07-20 00:57:50 +02:00
|
|
|
|
undefined when `value` is anything other than an unsigned 16-bit integer.
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(4);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeUInt16BE(0xdead, 0);
|
|
|
|
|
buf.writeUInt16BE(0xbeef, 2);
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer de ad be ef>
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeUInt16LE(0xdead, 0);
|
|
|
|
|
buf.writeUInt16LE(0xbeef, 2);
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer ad de ef be>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2011-05-16 03:25:11 +02:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeUInt32BE(value[, offset])`
|
|
|
|
|
### `buf.writeUInt32LE(value[, offset])`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
2019-03-31 16:06:01 +02:00
|
|
|
|
satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2011-05-06 22:42:55 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
Writes `value` to `buf` at the specified `offset` with the specified
|
|
|
|
|
[endianness][] (`writeUInt32BE()` writes as big endian, `writeUInt32LE()` writes
|
|
|
|
|
as little endian). `value` must be a valid unsigned 32-bit integer. Behavior is
|
2016-07-20 00:57:50 +02:00
|
|
|
|
undefined when `value` is anything other than an unsigned 32-bit integer.
|
2011-05-06 22:42:55 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(4);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeUInt32BE(0xfeedface, 0);
|
2014-12-23 19:03:54 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer fe ed fa ce>
|
2014-12-23 19:03:54 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeUInt32LE(0xfeedface, 0);
|
2014-12-23 19:03:54 +01:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer ce fa ed fe>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buf.writeUIntBE(value, offset, byteLength)`
|
|
|
|
|
### `buf.writeUIntLE(value, offset, byteLength)`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.5
|
2018-01-30 17:34:25 +01:00
|
|
|
|
changes:
|
2018-03-02 18:53:46 +01:00
|
|
|
|
- version: v10.0.0
|
2018-01-30 17:34:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/18395
|
2018-04-29 19:46:41 +02:00
|
|
|
|
description: Removed `noAssert` and no implicit coercion of the offset
|
|
|
|
|
and `byteLength` to `uint32` anymore.
|
2016-07-20 01:07:19 +02:00
|
|
|
|
-->
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `value` {integer} Number to be written to `buf`.
|
2018-04-12 06:09:49 +02:00
|
|
|
|
* `offset` {integer} Number of bytes to skip before starting to write. Must
|
|
|
|
|
satisfy `0 <= offset <= buf.length - byteLength`.
|
|
|
|
|
* `byteLength` {integer} Number of bytes to write. Must satisfy
|
2018-04-09 02:40:49 +02:00
|
|
|
|
`0 < byteLength <= 6`.
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* Returns: {integer} `offset` plus the number of bytes written.
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2016-07-20 00:57:50 +02:00
|
|
|
|
Writes `byteLength` bytes of `value` to `buf` at the specified `offset`.
|
|
|
|
|
Supports up to 48 bits of accuracy. Behavior is undefined when `value` is
|
|
|
|
|
anything other than an unsigned integer.
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```js
|
2016-01-26 00:00:06 +01:00
|
|
|
|
const buf = Buffer.allocUnsafe(6);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
buf.writeUIntBE(0x1234567890ab, 0, 6);
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer 12 34 56 78 90 ab>
|
2016-07-19 23:57:04 +02:00
|
|
|
|
|
|
|
|
|
buf.writeUIntLE(0x1234567890ab, 0, 6);
|
|
|
|
|
|
2016-01-17 18:39:07 +01:00
|
|
|
|
console.log(buf);
|
2018-02-12 23:24:54 +01:00
|
|
|
|
// Prints: <Buffer ab 90 78 56 34 12>
|
2016-01-17 18:39:07 +01:00
|
|
|
|
```
|
2015-11-04 16:49:28 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
### `new Buffer(array)`
|
|
|
|
|
<!-- YAML
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
changes:
|
|
|
|
|
- version: v10.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/19524
|
|
|
|
|
description: Calling this constructor emits a deprecation warning when
|
|
|
|
|
run from code outside the `node_modules` directory.
|
|
|
|
|
- version: v7.2.1
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9529
|
|
|
|
|
description: Calling this constructor no longer emits a deprecation warning.
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8169
|
|
|
|
|
description: Calling this constructor emits a deprecation warning now.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
> Stability: 0 - Deprecated: Use [`Buffer.from(array)`][] instead.
|
|
|
|
|
|
|
|
|
|
* `array` {integer[]} An array of bytes to copy from.
|
|
|
|
|
|
|
|
|
|
See [`Buffer.from(array)`][].
|
|
|
|
|
|
|
|
|
|
### `new Buffer(arrayBuffer[, byteOffset[, length]])`
|
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v3.0.0
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
changes:
|
|
|
|
|
- version: v10.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/19524
|
|
|
|
|
description: Calling this constructor emits a deprecation warning when
|
|
|
|
|
run from code outside the `node_modules` directory.
|
|
|
|
|
- version: v7.2.1
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9529
|
|
|
|
|
description: Calling this constructor no longer emits a deprecation warning.
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8169
|
|
|
|
|
description: Calling this constructor emits a deprecation warning now.
|
|
|
|
|
- version: v6.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/4682
|
|
|
|
|
description: The `byteOffset` and `length` parameters are supported now.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
> Stability: 0 - Deprecated: Use
|
|
|
|
|
> [`Buffer.from(arrayBuffer[, byteOffset[, length]])`][`Buffer.from(arrayBuf)`]
|
|
|
|
|
> 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`.
|
|
|
|
|
|
|
|
|
|
See
|
|
|
|
|
[`Buffer.from(arrayBuffer[, byteOffset[, length]])`][`Buffer.from(arrayBuf)`].
|
|
|
|
|
|
|
|
|
|
### `new Buffer(buffer)`
|
|
|
|
|
<!-- YAML
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
changes:
|
|
|
|
|
- version: v10.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/19524
|
|
|
|
|
description: Calling this constructor emits a deprecation warning when
|
|
|
|
|
run from code outside the `node_modules` directory.
|
|
|
|
|
- version: v7.2.1
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9529
|
|
|
|
|
description: Calling this constructor no longer emits a deprecation warning.
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8169
|
|
|
|
|
description: Calling this constructor emits a deprecation warning now.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
> Stability: 0 - Deprecated: Use [`Buffer.from(buffer)`][] instead.
|
|
|
|
|
|
|
|
|
|
* `buffer` {Buffer|Uint8Array} An existing `Buffer` or [`Uint8Array`][] from
|
|
|
|
|
which to copy data.
|
|
|
|
|
|
|
|
|
|
See [`Buffer.from(buffer)`][].
|
|
|
|
|
|
|
|
|
|
### `new Buffer(size)`
|
|
|
|
|
<!-- YAML
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
changes:
|
|
|
|
|
- version: v10.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/19524
|
|
|
|
|
description: Calling this constructor emits a deprecation warning when
|
|
|
|
|
run from code outside the `node_modules` directory.
|
|
|
|
|
- version: v8.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/12141
|
|
|
|
|
description: The `new Buffer(size)` will return zero-filled memory by
|
|
|
|
|
default.
|
|
|
|
|
- version: v7.2.1
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9529
|
|
|
|
|
description: Calling this constructor no longer emits a deprecation warning.
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8169
|
|
|
|
|
description: Calling this constructor emits a deprecation warning now.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
> Stability: 0 - Deprecated: Use [`Buffer.alloc()`][] instead (also see
|
|
|
|
|
> [`Buffer.allocUnsafe()`][]).
|
|
|
|
|
|
|
|
|
|
* `size` {integer} The desired length of the new `Buffer`.
|
|
|
|
|
|
|
|
|
|
See [`Buffer.alloc()`][] and [`Buffer.allocUnsafe()`][]. This variant of the
|
|
|
|
|
constructor is equivalent to [`Buffer.allocUnsafe()`][], although using
|
|
|
|
|
[`Buffer.alloc()`][] is recommended in code paths that are not critical to
|
|
|
|
|
performance.
|
|
|
|
|
|
|
|
|
|
### `new Buffer(string[, encoding])`
|
|
|
|
|
<!-- YAML
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
changes:
|
|
|
|
|
- version: v10.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/19524
|
|
|
|
|
description: Calling this constructor emits a deprecation warning when
|
|
|
|
|
run from code outside the `node_modules` directory.
|
|
|
|
|
- version: v7.2.1
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/9529
|
|
|
|
|
description: Calling this constructor no longer emits a deprecation warning.
|
|
|
|
|
- version: v7.0.0
|
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/8169
|
|
|
|
|
description: Calling this constructor emits a deprecation warning now.
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
> Stability: 0 - Deprecated:
|
|
|
|
|
> Use [`Buffer.from(string[, encoding])`][`Buffer.from(string)`] instead.
|
|
|
|
|
|
|
|
|
|
* `string` {string} String to encode.
|
|
|
|
|
* `encoding` {string} The encoding of `string`. **Default:** `'utf8'`.
|
|
|
|
|
|
|
|
|
|
See [`Buffer.from(string[, encoding])`][`Buffer.from(string)`].
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
## `buffer.INSPECT_MAX_BYTES`
|
2016-07-20 01:07:19 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v0.5.4
|
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2017-03-05 18:03:39 +01:00
|
|
|
|
* {integer} **Default:** `50`
|
2011-08-09 04:04:24 +02:00
|
|
|
|
|
2015-12-20 17:57:03 +01:00
|
|
|
|
Returns the maximum number of bytes that will be returned when
|
2016-07-20 00:38:00 +02:00
|
|
|
|
`buf.inspect()` is called. This can be overridden by user modules. See
|
2019-03-31 10:37:33 +02:00
|
|
|
|
[`util.inspect()`][] for more details on `buf.inspect()` behavior.
|
2014-12-23 19:03:54 +01:00
|
|
|
|
|
2019-06-20 22:08:13 +02:00
|
|
|
|
This is a property on the `buffer` module returned by
|
2016-07-20 00:57:50 +02:00
|
|
|
|
`require('buffer')`, not on the `Buffer` global or a `Buffer` instance.
|
2014-12-23 19:03:54 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
## `buffer.kMaxLength`
|
2016-07-20 01:02:02 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v3.0.0
|
|
|
|
|
-->
|
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* {integer} The largest size allowed for a single `Buffer` instance.
|
2016-07-20 01:02:02 +02:00
|
|
|
|
|
2018-04-29 13:16:44 +02:00
|
|
|
|
An alias for [`buffer.constants.MAX_LENGTH`][].
|
2016-07-20 01:02:02 +02:00
|
|
|
|
|
2019-06-20 22:08:13 +02:00
|
|
|
|
This is a property on the `buffer` module returned by
|
2016-11-26 22:12:03 +01:00
|
|
|
|
`require('buffer')`, not on the `Buffer` global or a `Buffer` instance.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
## `buffer.transcode(source, fromEnc, toEnc)`
|
2016-10-11 23:12:31 +02:00
|
|
|
|
<!-- YAML
|
2016-11-03 12:00:09 +01:00
|
|
|
|
added: v7.1.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
changes:
|
2017-03-16 04:26:14 +01:00
|
|
|
|
- version: v8.0.0
|
2017-02-22 00:10:25 +01:00
|
|
|
|
pr-url: https://github.com/nodejs/node/pull/10236
|
|
|
|
|
description: The `source` parameter can now be a `Uint8Array`.
|
2016-10-11 23:12:31 +02:00
|
|
|
|
-->
|
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `source` {Buffer|Uint8Array} A `Buffer` or `Uint8Array` instance.
|
|
|
|
|
* `fromEnc` {string} The current encoding.
|
|
|
|
|
* `toEnc` {string} To target encoding.
|
2019-03-31 10:02:42 +02:00
|
|
|
|
* Returns: {Buffer}
|
2016-10-11 23:12:31 +02:00
|
|
|
|
|
2016-12-10 22:28:37 +01:00
|
|
|
|
Re-encodes the given `Buffer` or `Uint8Array` instance from one character
|
|
|
|
|
encoding to another. Returns a new `Buffer` instance.
|
2016-10-11 23:12:31 +02:00
|
|
|
|
|
|
|
|
|
Throws if the `fromEnc` or `toEnc` specify invalid character encodings or if
|
|
|
|
|
conversion from `fromEnc` to `toEnc` is not permitted.
|
|
|
|
|
|
2018-08-11 07:04:47 +02:00
|
|
|
|
Encodings supported by `buffer.transcode()` are: `'ascii'`, `'utf8'`,
|
|
|
|
|
`'utf16le'`, `'ucs2'`, `'latin1'`, and `'binary'`.
|
|
|
|
|
|
2016-10-11 23:12:31 +02:00
|
|
|
|
The transcoding process will use substitution characters if a given byte
|
|
|
|
|
sequence cannot be adequately represented in the target encoding. For instance:
|
|
|
|
|
|
|
|
|
|
```js
|
2016-11-26 22:15:11 +01:00
|
|
|
|
const buffer = require('buffer');
|
|
|
|
|
|
2016-10-11 23:12:31 +02:00
|
|
|
|
const newBuf = buffer.transcode(Buffer.from('€'), 'utf8', 'ascii');
|
|
|
|
|
console.log(newBuf.toString('ascii'));
|
2016-11-08 21:04:57 +01:00
|
|
|
|
// Prints: '?'
|
2016-10-11 23:12:31 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Because the Euro (`€`) sign is not representable in US-ASCII, it is replaced
|
|
|
|
|
with `?` in the transcoded `Buffer`.
|
|
|
|
|
|
2019-06-20 22:08:13 +02:00
|
|
|
|
This is a property on the `buffer` module returned by
|
2016-11-26 22:12:03 +01:00
|
|
|
|
`require('buffer')`, not on the `Buffer` global or a `Buffer` instance.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
## Class: `SlowBuffer`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
-->
|
2012-02-27 20:07:25 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
> Stability: 0 - Deprecated: Use [`Buffer.allocUnsafeSlow()`][] instead.
|
2016-03-21 20:39:57 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
See [`Buffer.allocUnsafeSlow()`][]. This was never a class in the sense that
|
|
|
|
|
the constructor always returned a `Buffer` instance, rather than a `SlowBuffer`
|
|
|
|
|
instance.
|
2015-11-14 04:21:49 +01:00
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `new SlowBuffer(size)`
|
2016-05-01 02:00:00 +02:00
|
|
|
|
<!-- YAML
|
|
|
|
|
deprecated: v6.0.0
|
|
|
|
|
-->
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2019-03-31 10:37:33 +02:00
|
|
|
|
> Stability: 0 - Deprecated: Use [`Buffer.allocUnsafeSlow()`][] instead.
|
2016-03-21 20:39:57 +01:00
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* `size` {integer} The desired length of the new `SlowBuffer`.
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
See [`Buffer.allocUnsafeSlow()`][].
|
2016-01-26 00:00:06 +01:00
|
|
|
|
|
2017-06-05 11:58:20 +02:00
|
|
|
|
## Buffer Constants
|
|
|
|
|
<!-- YAML
|
2018-03-25 12:01:33 +02:00
|
|
|
|
added: v8.2.0
|
2017-06-05 11:58:20 +02:00
|
|
|
|
-->
|
|
|
|
|
|
2019-06-20 22:08:13 +02:00
|
|
|
|
`buffer.constants` is a property on the `buffer` module returned by
|
2017-06-05 11:58:20 +02:00
|
|
|
|
`require('buffer')`, not on the `Buffer` global or a `Buffer` instance.
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buffer.constants.MAX_LENGTH`
|
2017-06-05 11:58:20 +02:00
|
|
|
|
<!-- YAML
|
2018-03-25 12:01:33 +02:00
|
|
|
|
added: v8.2.0
|
2017-06-05 11:58:20 +02:00
|
|
|
|
-->
|
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* {integer} The largest size allowed for a single `Buffer` instance.
|
2017-06-05 11:58:20 +02:00
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
On 32-bit architectures, this value currently is `(2^30)-1` (~1GB).
|
|
|
|
|
On 64-bit architectures, this value currently is `(2^31)-1` (~2GB).
|
2017-06-05 11:58:20 +02:00
|
|
|
|
|
|
|
|
|
This value is also available as [`buffer.kMaxLength`][].
|
|
|
|
|
|
2019-12-23 22:10:25 +01:00
|
|
|
|
### `buffer.constants.MAX_STRING_LENGTH`
|
2017-06-05 11:58:20 +02:00
|
|
|
|
<!-- YAML
|
2018-03-25 12:01:33 +02:00
|
|
|
|
added: v8.2.0
|
2017-06-05 11:58:20 +02:00
|
|
|
|
-->
|
|
|
|
|
|
2017-06-18 21:53:54 +02:00
|
|
|
|
* {integer} The largest length allowed for a single `string` instance.
|
2017-06-05 11:58:20 +02:00
|
|
|
|
|
|
|
|
|
Represents the largest `length` that a `string` primitive can have, counted
|
|
|
|
|
in UTF-16 code units.
|
|
|
|
|
|
|
|
|
|
This value may depend on the JS engine that is being used.
|
|
|
|
|
|
2020-03-04 14:06:56 +01:00
|
|
|
|
## `Buffer.from()`, `Buffer.alloc()`, and `Buffer.allocUnsafe()`
|
|
|
|
|
|
|
|
|
|
In versions of Node.js prior to 6.0.0, `Buffer` instances were created using the
|
|
|
|
|
`Buffer` constructor function, which allocates the returned `Buffer`
|
|
|
|
|
differently based on what arguments are provided:
|
|
|
|
|
|
|
|
|
|
* Passing a number as the first argument to `Buffer()` (e.g. `new Buffer(10)`)
|
|
|
|
|
allocates a new `Buffer` object of the specified size. Prior to Node.js 8.0.0,
|
|
|
|
|
the memory allocated for such `Buffer` instances is *not* initialized and
|
|
|
|
|
*can contain sensitive data*. Such `Buffer` instances *must* be subsequently
|
|
|
|
|
initialized by using either [`buf.fill(0)`][`buf.fill()`] or by writing to the
|
|
|
|
|
entire `Buffer` before reading data from the `Buffer`.
|
|
|
|
|
While this behavior is *intentional* to improve performance,
|
|
|
|
|
development experience has demonstrated that a more explicit distinction is
|
|
|
|
|
required between creating a fast-but-uninitialized `Buffer` versus creating a
|
|
|
|
|
slower-but-safer `Buffer`. Since Node.js 8.0.0, `Buffer(num)` and `new
|
|
|
|
|
Buffer(num)` return a `Buffer` with initialized memory.
|
|
|
|
|
* Passing a string, array, or `Buffer` as the first argument copies the
|
|
|
|
|
passed object's data into the `Buffer`.
|
|
|
|
|
* Passing an [`ArrayBuffer`][] or a [`SharedArrayBuffer`][] returns a `Buffer`
|
|
|
|
|
that shares allocated memory with the given array buffer.
|
|
|
|
|
|
|
|
|
|
Because the behavior of `new Buffer()` is different depending on the type of the
|
|
|
|
|
first argument, security and reliability issues can be inadvertently introduced
|
|
|
|
|
into applications when argument validation or `Buffer` initialization is not
|
|
|
|
|
performed.
|
|
|
|
|
|
|
|
|
|
For example, if an attacker can cause an application to receive a number where
|
|
|
|
|
a string is expected, the application may call `new Buffer(100)`
|
|
|
|
|
instead of `new Buffer("100")`, leading it to allocate a 100 byte buffer instead
|
|
|
|
|
of allocating a 3 byte buffer with content `"100"`. This is commonly possible
|
|
|
|
|
using JSON API calls. Since JSON distinguishes between numeric and string types,
|
|
|
|
|
it allows injection of numbers where a naively written application that does not
|
|
|
|
|
validate its input sufficiently might expect to always receive a string.
|
|
|
|
|
Before Node.js 8.0.0, the 100 byte buffer might contain
|
|
|
|
|
arbitrary pre-existing in-memory data, so may be used to expose in-memory
|
|
|
|
|
secrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot
|
|
|
|
|
occur because the data is zero-filled. However, other attacks are still
|
|
|
|
|
possible, 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 of `Buffer` instances more reliable and less error-prone,
|
|
|
|
|
the various forms of the `new Buffer()` constructor have been **deprecated**
|
|
|
|
|
and replaced by separate `Buffer.from()`, [`Buffer.alloc()`][], and
|
|
|
|
|
[`Buffer.allocUnsafe()`][] methods.
|
|
|
|
|
|
|
|
|
|
*Developers should migrate all existing uses of the `new Buffer()` constructors
|
|
|
|
|
to one of these new APIs.*
|
|
|
|
|
|
|
|
|
|
* [`Buffer.from(array)`][] returns a new `Buffer` that *contains a copy* of the
|
|
|
|
|
provided octets.
|
|
|
|
|
* [`Buffer.from(arrayBuffer[, byteOffset[, length]])`][`Buffer.from(arrayBuf)`]
|
|
|
|
|
returns a new `Buffer` that *shares the same allocated memory* as the given
|
|
|
|
|
[`ArrayBuffer`][].
|
|
|
|
|
* [`Buffer.from(buffer)`][] returns a new `Buffer` that *contains a copy* of the
|
|
|
|
|
contents of the given `Buffer`.
|
|
|
|
|
* [`Buffer.from(string[, encoding])`][`Buffer.from(string)`] returns a new
|
|
|
|
|
`Buffer` that *contains a copy* of the provided string.
|
|
|
|
|
* [`Buffer.alloc(size[, fill[, encoding]])`][`Buffer.alloc()`] returns a new
|
|
|
|
|
initialized `Buffer` of the specified size. This method is slower than
|
|
|
|
|
[`Buffer.allocUnsafe(size)`][`Buffer.allocUnsafe()`] but guarantees that newly
|
|
|
|
|
created `Buffer` instances never contain old data that is potentially
|
|
|
|
|
sensitive. A `TypeError` will be thrown if `size` is not a number.
|
|
|
|
|
* [`Buffer.allocUnsafe(size)`][`Buffer.allocUnsafe()`] and
|
|
|
|
|
[`Buffer.allocUnsafeSlow(size)`][`Buffer.allocUnsafeSlow()`] each return a
|
|
|
|
|
new uninitialized `Buffer` of the specified `size`. Because the `Buffer` is
|
|
|
|
|
uninitialized, the allocated segment of memory might contain old data that is
|
|
|
|
|
potentially sensitive.
|
|
|
|
|
|
|
|
|
|
`Buffer` instances returned by [`Buffer.allocUnsafe()`][] *may* be allocated off
|
|
|
|
|
a shared internal memory pool if `size` is less than or equal to half
|
|
|
|
|
[`Buffer.poolSize`][]. Instances returned by [`Buffer.allocUnsafeSlow()`][]
|
|
|
|
|
*never* use the shared internal memory pool.
|
|
|
|
|
|
|
|
|
|
### The `--zero-fill-buffers` command line option
|
|
|
|
|
<!-- YAML
|
|
|
|
|
added: v5.10.0
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
Node.js can be started using the `--zero-fill-buffers` command line option to
|
|
|
|
|
cause all newly-allocated `Buffer` instances to be zero-filled upon creation by
|
|
|
|
|
default. Without the option, buffers created with [`Buffer.allocUnsafe()`][],
|
|
|
|
|
[`Buffer.allocUnsafeSlow()`][], and `new 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 allocated
|
|
|
|
|
`Buffer` instances cannot contain old data that is potentially sensitive.
|
|
|
|
|
|
|
|
|
|
```console
|
|
|
|
|
$ node --zero-fill-buffers
|
|
|
|
|
> Buffer.allocUnsafe(5);
|
|
|
|
|
<Buffer 00 00 00 00 00>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### What makes `Buffer.allocUnsafe()` and `Buffer.allocUnsafeSlow()` "unsafe"?
|
|
|
|
|
|
|
|
|
|
When calling [`Buffer.allocUnsafe()`][] and [`Buffer.allocUnsafeSlow()`][], the
|
|
|
|
|
segment of allocated memory is *uninitialized* (it is not zeroed-out). While
|
|
|
|
|
this design makes the allocation of memory quite fast, the allocated segment of
|
|
|
|
|
memory might contain old data that is potentially sensitive. Using a `Buffer`
|
|
|
|
|
created by [`Buffer.allocUnsafe()`][] without *completely* overwriting the
|
|
|
|
|
memory can allow this old data to be leaked when the `Buffer` memory is read.
|
|
|
|
|
|
|
|
|
|
While there are clear performance advantages to using
|
|
|
|
|
[`Buffer.allocUnsafe()`][], extra care *must* be taken in order to avoid
|
|
|
|
|
introducing security vulnerabilities into an application.
|
|
|
|
|
|
2019-03-18 05:32:12 +01:00
|
|
|
|
[RFC 4648, Section 5]: https://tools.ietf.org/html/rfc4648#section-5
|
2019-01-13 18:49:56 +01:00
|
|
|
|
[WHATWG Encoding Standard]: https://encoding.spec.whatwg.org/
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer
|
2016-07-19 23:57:53 +02:00
|
|
|
|
[`Buffer.alloc()`]: #buffer_class_method_buffer_alloc_size_fill_encoding
|
|
|
|
|
[`Buffer.allocUnsafe()`]: #buffer_class_method_buffer_allocunsafe_size
|
|
|
|
|
[`Buffer.allocUnsafeSlow()`]: #buffer_class_method_buffer_allocunsafeslow_size
|
|
|
|
|
[`Buffer.from(array)`]: #buffer_class_method_buffer_from_array
|
2018-03-23 06:33:16 +01:00
|
|
|
|
[`Buffer.from(arrayBuf)`]: #buffer_class_method_buffer_from_arraybuffer_byteoffset_length
|
2016-07-19 23:57:53 +02:00
|
|
|
|
[`Buffer.from(buffer)`]: #buffer_class_method_buffer_from_buffer
|
2016-10-26 14:30:07 +02:00
|
|
|
|
[`Buffer.from(string)`]: #buffer_class_method_buffer_from_string_encoding
|
2016-07-19 23:57:53 +02:00
|
|
|
|
[`Buffer.poolSize`]: #buffer_class_property_buffer_poolsize
|
2016-02-16 04:08:49 +01:00
|
|
|
|
[`DataView`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView
|
2018-04-12 20:10:46 +02:00
|
|
|
|
[`ERR_INVALID_BUFFER_SIZE`]: errors.html#ERR_INVALID_BUFFER_SIZE
|
|
|
|
|
[`ERR_INVALID_OPT_VALUE`]: errors.html#ERR_INVALID_OPT_VALUE
|
2018-09-20 05:04:47 +02:00
|
|
|
|
[`ERR_OUT_OF_RANGE`]: errors.html#ERR_OUT_OF_RANGE
|
2016-07-19 23:57:53 +02:00
|
|
|
|
[`JSON.stringify()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
|
2017-09-20 11:53:29 +02:00
|
|
|
|
[`SharedArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
|
2016-12-07 09:36:16 +01:00
|
|
|
|
[`String#indexOf()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
|
|
|
|
|
[`String#lastIndexOf()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/lastIndexOf
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`String.prototype.length`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length
|
2016-07-19 23:57:53 +02:00
|
|
|
|
[`TypedArray.from()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/from
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[`TypedArray#set()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/set
|
|
|
|
|
[`TypedArray#slice()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice
|
|
|
|
|
[`TypedArray#subarray()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`TypedArray`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
|
2016-07-19 23:57:53 +02:00
|
|
|
|
[`Uint32Array`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array
|
|
|
|
|
[`Uint8Array`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`buf.buffer`]: #buffer_buf_buffer
|
|
|
|
|
[`buf.compare()`]: #buffer_buf_compare_target_targetstart_targetend_sourcestart_sourceend
|
|
|
|
|
[`buf.entries()`]: #buffer_buf_entries
|
|
|
|
|
[`buf.fill()`]: #buffer_buf_fill_value_offset_end_encoding
|
|
|
|
|
[`buf.indexOf()`]: #buffer_buf_indexof_value_byteoffset_encoding
|
|
|
|
|
[`buf.keys()`]: #buffer_buf_keys
|
|
|
|
|
[`buf.length`]: #buffer_buf_length
|
|
|
|
|
[`buf.slice()`]: #buffer_buf_slice_start_end
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[`buf.toString()`]: #buffer_buf_tostring_encoding_start_end
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`buf.values()`]: #buffer_buf_values
|
2017-06-05 11:58:20 +02:00
|
|
|
|
[`buffer.constants.MAX_LENGTH`]: #buffer_buffer_constants_max_length
|
|
|
|
|
[`buffer.constants.MAX_STRING_LENGTH`]: #buffer_buffer_constants_max_string_length
|
2018-11-27 20:49:21 +01:00
|
|
|
|
[`buffer.kMaxLength`]: #buffer_buffer_kmaxlength
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[`util.inspect()`]: util.html#util_util_inspect_object_options
|
2020-03-04 14:06:56 +01:00
|
|
|
|
[ASCII]: https://en.wikipedia.org/wiki/ASCII
|
|
|
|
|
[Base64]: https://en.wikipedia.org/wiki/Base64
|
|
|
|
|
[ISO-8859-1]: https://en.wikipedia.org/wiki/ISO-8859-1
|
|
|
|
|
[UTF-8]: https://en.wikipedia.org/wiki/UTF-8
|
|
|
|
|
[UTF-16]: https://en.wikipedia.org/wiki/UTF-16
|
|
|
|
|
[binary strings]: https://developer.mozilla.org/en-US/docs/Web/API/DOMString/Binary
|
|
|
|
|
[endianness]: https://en.wikipedia.org/wiki/Endianness
|
2017-05-08 18:30:13 +02:00
|
|
|
|
[iterator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
|