Buffer#

Buffer-Objekte werden verwendet, um eine Sequenz fester Länge von Bytes darzustellen. Viele Node.js-APIs unterstützen Buffer.

Die Buffer-Klasse ist eine Unterklasse der JavaScript <Uint8Array>-Klasse und erweitert sie um Methoden für zusätzliche Anwendungsfälle. Node.js-APIs akzeptieren überall dort, wo Buffer unterstützt werden, auch einfache <Uint8Array>.

Obwohl die Buffer-Klasse im globalen Bereich verfügbar ist, wird dennoch empfohlen, explizit über ein import- oder require-Statement darauf zu verweisen.

import { Buffer } from 'node:buffer';

// Creates a zero-filled Buffer of length 10.
const buf1 = Buffer.alloc(10);

// Creates a Buffer of length 10,
// filled with bytes which all have the value `1`.
const buf2 = Buffer.alloc(10, 1);

// Creates an uninitialized buffer of length 10.
// This is faster than calling Buffer.alloc() but the returned
// Buffer instance might contain old data that needs to be
// overwritten using fill(), write(), or other functions that fill the Buffer's
// contents.
const buf3 = Buffer.allocUnsafe(10);

// Creates a Buffer containing the bytes [1, 2, 3].
const buf4 = Buffer.from([1, 2, 3]);

// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries
// are all truncated using `(value & 255)` to fit into the range 0–255.
const buf5 = Buffer.from([257, 257.5, -255, '1']);

// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':
// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)
// [116, 195, 169, 115, 116] (in decimal notation)
const buf6 = Buffer.from('tést');

// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
const buf7 = Buffer.from('tést', 'latin1');
const { Buffer } = require('node:buffer');

// Creates a zero-filled Buffer of length 10.
const buf1 = Buffer.alloc(10);

// Creates a Buffer of length 10,
// filled with bytes which all have the value `1`.
const buf2 = Buffer.alloc(10, 1);

// Creates an uninitialized buffer of length 10.
// This is faster than calling Buffer.alloc() but the returned
// Buffer instance might contain old data that needs to be
// overwritten using fill(), write(), or other functions that fill the Buffer's
// contents.
const buf3 = Buffer.allocUnsafe(10);

// Creates a Buffer containing the bytes [1, 2, 3].
const buf4 = Buffer.from([1, 2, 3]);

// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries
// are all truncated using `(value & 255)` to fit into the range 0–255.
const buf5 = Buffer.from([257, 257.5, -255, '1']);

// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':
// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)
// [116, 195, 169, 115, 116] (in decimal notation)
const buf6 = Buffer.from('tést');

// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
const buf7 = Buffer.from('tést', 'latin1');

Buffer und Zeichenkodierungen#

Bei der Konvertierung zwischen Buffer und Strings kann eine Zeichenkodierung angegeben werden. Wenn keine Zeichenkodierung angegeben ist, wird UTF-8 als Standard verwendet.

import { Buffer } from 'node:buffer';

const buf = Buffer.from('hello world', 'utf8');

console.log(buf.toString('hex'));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// Prints: aGVsbG8gd29ybGQ=

console.log(Buffer.from('fhqwhgads', 'utf8'));
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
console.log(Buffer.from('fhqwhgads', 'utf16le'));
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>
const { Buffer } = require('node:buffer');

const buf = Buffer.from('hello world', 'utf8');

console.log(buf.toString('hex'));
// Prints: 68656c6c6f20776f726c64
console.log(buf.toString('base64'));
// Prints: aGVsbG8gd29ybGQ=

console.log(Buffer.from('fhqwhgads', 'utf8'));
// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
console.log(Buffer.from('fhqwhgads', 'utf16le'));
// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>

Node.js-Buffer akzeptieren alle Schreibweisen von Kodierungs-Strings, die sie erhalten. Beispielsweise kann UTF-8 als 'utf8', 'UTF8' oder 'uTf8' angegeben werden.

Die derzeit von Node.js unterstützten Zeichenkodierungen sind die folgenden

  • 'utf8' (Alias: 'utf-8'): Multi-Byte-kodierte Unicode-Zeichen. Viele Webseiten und andere Dokumentformate verwenden UTF-8. Dies ist die Standard-Zeichenkodierung. Beim Dekodieren eines Buffer in einen String, der nicht ausschließlich gültige UTF-8-Daten enthält, wird das Unicode-Ersatzzeichen U+FFFD verwendet, um diese Fehler darzustellen.

  • 'utf16le' (Alias: 'utf-16le'): Multi-Byte-kodierte Unicode-Zeichen. Im Gegensatz zu 'utf8' wird jedes Zeichen im String mit 2 oder 4 Bytes kodiert. Node.js unterstützt nur die Little-Endian-Variante von UTF-16.

  • 'latin1': Latin-1 steht für ISO-8859-1. Diese Zeichenkodierung unterstützt nur Unicode-Zeichen von U+0000 bis U+00FF. Jedes Zeichen wird mit einem einzigen Byte kodiert. Zeichen, die nicht in diesen Bereich passen, werden abgeschnitten und auf Zeichen in diesem Bereich abgebildet.

Die Umwandlung eines Buffer in einen String unter Verwendung einer der oben genannten Kodierungen wird als Dekodieren bezeichnet, und die Umwandlung eines Strings in einen Buffer als Kodieren.

Node.js unterstützt auch die folgenden Binär-zu-Text-Kodierungen. Bei Binär-zu-Text-Kodierungen ist die Namenskonvention umgekehrt: Das Konvertieren eines Buffer in einen String wird normalerweise als Kodieren bezeichnet, und das Konvertieren eines Strings in einen Buffer als Dekodieren.

  • 'base64': Base64-Kodierung. Beim Erstellen eines Buffer aus einem String akzeptiert diese Kodierung auch das "URL and Filename Safe Alphabet", wie in RFC 4648, Abschnitt 5 spezifiziert. Leerzeichen wie Leerzeichen, Tabs und Zeilenumbrüche innerhalb des base64-kodierten Strings werden ignoriert.

  • 'base64url': base64url-Kodierung wie in RFC 4648, Abschnitt 5 spezifiziert. Beim Erstellen eines Buffer aus einem String akzeptiert diese Kodierung auch reguläre base64-kodierte Strings. Beim Kodieren eines Buffer in einen String lässt diese Kodierung das Padding weg.

  • 'hex': Kodiert jedes Byte als zwei hexadezimale Zeichen. Beim Dekodieren von Strings, die nicht ausschließlich aus einer geraden Anzahl von hexadezimalen Zeichen bestehen, kann eine Datenkürzung auftreten. Siehe unten für ein Beispiel.

Die folgenden älteren Zeichenkodierungen werden ebenfalls unterstützt

  • 'ascii': Nur für 7-Bit ASCII-Daten. Beim Kodieren eines Strings in einen Buffer ist dies äquivalent zur Verwendung von 'latin1'. Beim Dekodieren eines Buffer in einen String setzt die Verwendung dieser Kodierung zusätzlich das höchste Bit jedes Bytes zurück, bevor es als 'latin1' dekodiert wird. Im Allgemeinen gibt es keinen Grund, diese Kodierung zu verwenden, da 'utf8' (oder, wenn bekannt ist, dass die Daten immer nur ASCII enthalten, 'latin1') eine bessere Wahl beim Kodieren oder Dekodieren von reinem ASCII-Text ist. Sie wird nur aus Gründen der Abwärtskompatibilität bereitgestellt.

  • 'binary': Alias für 'latin1'. Der Name dieser Kodierung kann sehr irreführend sein, da alle hier aufgeführten Kodierungen zwischen Strings und Binärdaten konvertieren. Für die Konvertierung zwischen Strings und Buffer ist normalerweise 'utf8' die richtige Wahl.

  • 'ucs2', 'ucs-2': Aliase für 'utf16le'. UCS-2 bezog sich früher auf eine Variante von UTF-16, die keine Zeichen mit Codepunkten größer als U+FFFF unterstützte. In Node.js werden diese Codepunkte immer unterstützt.

import { Buffer } from 'node:buffer';

Buffer.from('1ag123', 'hex');
// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
// ('g') encountered.

Buffer.from('1a7', 'hex');
// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').

Buffer.from('1634', 'hex');
// Prints <Buffer 16 34>, all data represented.
const { Buffer } = require('node:buffer');

Buffer.from('1ag123', 'hex');
// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
// ('g') encountered.

Buffer.from('1a7', 'hex');
// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').

Buffer.from('1634', 'hex');
// Prints <Buffer 16 34>, all data represented.

Moderne Webbrowser folgen dem WHATWG Encoding Standard, der sowohl 'latin1' als auch 'ISO-8859-1' auf 'win-1252' abbildet. Das bedeutet, dass bei Dingen wie http.get(), wenn der zurückgegebene Zeichensatz einer der in der WHATWG-Spezifikation aufgeführten ist, es möglich ist, dass der Server tatsächlich 'win-1252'-kodierte Daten zurückgegeben hat, und die Verwendung der 'latin1'-Kodierung die Zeichen möglicherweise falsch dekodiert.

Buffer und TypedArrays#

Buffer-Instanzen sind auch JavaScript <Uint8Array>- und <TypedArray>-Instanzen. Alle <TypedArray>-Methoden und -Eigenschaften sind auf Buffer verfügbar. Es gibt jedoch subtile Inkompatibilitäten zwischen der Buffer-API und der <TypedArray>-API.

Insbesondere

Es gibt zwei Möglichkeiten, neue <TypedArray>-Instanzen aus einem Buffer zu erstellen

  • Das Übergeben eines Buffer an einen <TypedArray>-Konstruktor kopiert den Inhalt des Buffer, interpretiert als ein Array von Ganzzahlen und nicht als Byte-Sequenz des Zieltyps.
import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);

console.log(uint32array);

// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]
const { Buffer } = require('node:buffer');

const buf = Buffer.from([1, 2, 3, 4]);
const uint32array = new Uint32Array(buf);

console.log(uint32array);

// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]
  • Das Übergeben des zugrunde liegenden <ArrayBuffer> des Buffer erstellt ein <TypedArray>, das seinen Speicher mit dem Buffer teilt.
import { Buffer } from 'node:buffer';

const buf = Buffer.from('hello', 'utf16le');
const uint16array = new Uint16Array(
  buf.buffer,
  buf.byteOffset,
  buf.length / Uint16Array.BYTES_PER_ELEMENT);

console.log(uint16array);

// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]
const { Buffer } = require('node:buffer');

const buf = Buffer.from('hello', 'utf16le');
const uint16array = new Uint16Array(
  buf.buffer,
  buf.byteOffset,
  buf.length / Uint16Array.BYTES_PER_ELEMENT);

console.log(uint16array);

// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]

Es ist möglich, einen neuen Buffer zu erstellen, der den gleichen zugewiesenen Speicher wie eine <TypedArray>-Instanz teilt, indem man die .buffer-Eigenschaft des TypedArray-Objekts auf die gleiche Weise verwendet. Buffer.from() verhält sich in diesem Kontext wie new Uint8Array().

import { Buffer } from 'node:buffer';

const arr = new Uint16Array(2);

arr[0] = 5000;
arr[1] = 4000;

// Copies the contents of `arr`.
const buf1 = Buffer.from(arr);

// Shares memory with `arr`.
const buf2 = Buffer.from(arr.buffer);

console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 a0 0f>

arr[1] = 6000;

console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 70 17>
const { Buffer } = require('node:buffer');

const arr = new Uint16Array(2);

arr[0] = 5000;
arr[1] = 4000;

// Copies the contents of `arr`.
const buf1 = Buffer.from(arr);

// Shares memory with `arr`.
const buf2 = Buffer.from(arr.buffer);

console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 a0 0f>

arr[1] = 6000;

console.log(buf1);
// Prints: <Buffer 88 a0>
console.log(buf2);
// Prints: <Buffer 88 13 70 17>

Beim Erstellen eines Buffer unter Verwendung des .buffer eines <TypedArray> ist es möglich, nur einen Teil des zugrunde liegenden <ArrayBuffer> zu verwenden, indem man byteOffset- und length-Parameter übergibt.

import { Buffer } from 'node:buffer';

const arr = new Uint16Array(20);
const buf = Buffer.from(arr.buffer, 0, 16);

console.log(buf.length);
// Prints: 16
const { Buffer } = require('node:buffer');

const arr = new Uint16Array(20);
const buf = Buffer.from(arr.buffer, 0, 16);

console.log(buf.length);
// Prints: 16

Buffer.from() und TypedArray.from() haben unterschiedliche Signaturen und Implementierungen. Insbesondere akzeptieren die <TypedArray>-Varianten ein zweites Argument, das eine Mapping-Funktion ist, die auf jedes Element des Typed Array aufgerufen wird

Die Buffer.from()-Methode unterstützt jedoch nicht die Verwendung einer Mapping-Funktion

Buffer-Methoden sind mit Uint8Array-Instanzen aufrufbar#

Alle Methoden auf dem Buffer-Prototyp sind mit einer Uint8Array-Instanz aufrufbar.

const { toString, write } = Buffer.prototype;

const uint8array = new Uint8Array(5);

write.call(uint8array, 'hello', 0, 5, 'utf8'); // 5
// <Uint8Array 68 65 6c 6c 6f>

toString.call(uint8array, 'utf8'); // 'hello'

Buffer und Iteration#

Buffer-Instanzen können mit der for..of-Syntax iteriert werden

import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, 2, 3]);

for (const b of buf) {
  console.log(b);
}
// Prints:
//   1
//   2
//   3
const { Buffer } = require('node:buffer');

const buf = Buffer.from([1, 2, 3]);

for (const b of buf) {
  console.log(b);
}
// Prints:
//   1
//   2
//   3

Zusätzlich können die Methoden buf.values(), buf.keys() und buf.entries() verwendet werden, um Iteratoren zu erstellen.

Klasse: Blob#

Ein <Blob> kapselt unveränderliche, rohe Daten, die sicher über mehrere Worker-Threads hinweg geteilt werden können.

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

  • sources <string[]> | <ArrayBuffer[]> | <TypedArray[]> | <DataView[]> | <Blob[]> Ein Array von String-, <ArrayBuffer>, <TypedArray>, <DataView>- oder <Blob>-Objekten oder eine Mischung aus solchen Objekten, die innerhalb des Blob gespeichert werden.
  • options <Object>
    • endings <string> Entweder 'transparent' oder 'native'. Wenn auf 'native' gesetzt, werden Zeilenenden in String-Quellteilen in das plattformnative Zeilenende konvertiert, wie durch require('node:os').EOL angegeben.
    • type <string> Der Blob-Inhaltstyp. Die Absicht ist, dass type den MIME-Medientyp der Daten vermittelt; es wird jedoch keine Validierung des Typformats durchgeführt.

Erstellt ein neues Blob-Objekt, das eine Verkettung der angegebenen Quellen enthält.

<ArrayBuffer>, <TypedArray>, <DataView>- und <Buffer>-Quellen werden in den 'Blob' kopiert und können daher nach der Erstellung des 'Blob' sicher modifiziert werden.

String-Quellen werden als UTF-8-Byte-Sequenzen kodiert und in den Blob kopiert. Nicht übereinstimmende Surrogate-Paare innerhalb jedes String-Teils werden durch Unicode U+FFFD-Ersatzzeichen ersetzt.

blob.arrayBuffer()#

Gibt ein Promise zurück, das mit einem <ArrayBuffer> erfüllt wird, der eine Kopie der Blob-Daten enthält.

blob.bytes()#

Die blob.bytes()-Methode gibt das Byte des Blob-Objekts als Promise<Uint8Array> zurück.

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

blob.size#

Die Gesamtgröße des Blob in Bytes.

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

Erstellt und gibt ein neues Blob zurück, das eine Teilmenge der Daten dieses Blob-Objekts enthält. Das ursprüngliche Blob wird nicht verändert.

blob.stream()#

Gibt einen neuen ReadableStream zurück, der es ermöglicht, den Inhalt des Blob zu lesen.

blob.text()#

Gibt ein Promise zurück, das mit dem Inhalt des Blob erfüllt wird, dekodiert als UTF-8-String.

blob.type#

Der Inhaltstyp des Blob.

Blob-Objekte und MessageChannel#

Sobald ein <Blob>-Objekt erstellt wurde, kann es via MessagePort an mehrere Ziele gesendet werden, ohne die Daten zu übertragen oder sofort zu kopieren. Die vom Blob enthaltenen Daten werden nur kopiert, wenn die arrayBuffer()- oder text()-Methoden aufgerufen werden.

import { Blob } from 'node:buffer';
import { setTimeout as delay } from 'node:timers/promises';

const blob = new Blob(['hello there']);

const mc1 = new MessageChannel();
const mc2 = new MessageChannel();

mc1.port1.onmessage = async ({ data }) => {
  console.log(await data.arrayBuffer());
  mc1.port1.close();
};

mc2.port1.onmessage = async ({ data }) => {
  await delay(1000);
  console.log(await data.arrayBuffer());
  mc2.port1.close();
};

mc1.port2.postMessage(blob);
mc2.port2.postMessage(blob);

// The Blob is still usable after posting.
blob.text().then(console.log);
const { Blob } = require('node:buffer');
const { setTimeout: delay } = require('node:timers/promises');

const blob = new Blob(['hello there']);

const mc1 = new MessageChannel();
const mc2 = new MessageChannel();

mc1.port1.onmessage = async ({ data }) => {
  console.log(await data.arrayBuffer());
  mc1.port1.close();
};

mc2.port1.onmessage = async ({ data }) => {
  await delay(1000);
  console.log(await data.arrayBuffer());
  mc2.port1.close();
};

mc1.port2.postMessage(blob);
mc2.port2.postMessage(blob);

// The Blob is still usable after posting.
blob.text().then(console.log);

Klasse: Buffer#

Die Buffer-Klasse ist ein globaler Typ für den direkten Umgang mit Binärdaten. Sie kann auf vielfältige Weise konstruiert werden.

Statische Methode: Buffer.alloc(size[, fill[, encoding]])#

Weist einen neuen Buffer der Größe size Bytes zu. Wenn fill undefined ist, wird der Buffer mit Nullen gefüllt.

import { Buffer } from 'node:buffer';

const buf = Buffer.alloc(5);

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

const buf = Buffer.alloc(5);

console.log(buf);
// Prints: <Buffer 00 00 00 00 00>

Wenn size größer als buffer.constants.MAX_LENGTH oder kleiner als 0 ist, wird ERR_OUT_OF_RANGE geworfen.

Wenn fill angegeben ist, wird der zugewiesene Buffer durch Aufruf von buf.fill(fill) initialisiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.alloc(5, 'a');

console.log(buf);
// Prints: <Buffer 61 61 61 61 61>
const { Buffer } = require('node:buffer');

const buf = Buffer.alloc(5, 'a');

console.log(buf);
// Prints: <Buffer 61 61 61 61 61>

Wenn sowohl fill als auch encoding angegeben sind, wird der zugewiesene Buffer durch Aufruf von buf.fill(fill, encoding) initialisiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');

console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
const { Buffer } = require('node:buffer');

const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');

console.log(buf);
// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>

Der Aufruf von Buffer.alloc() kann messbar langsamer sein als die Alternative Buffer.allocUnsafe(), stellt aber sicher, dass der Inhalt der neu erstellten Buffer-Instanz niemals sensible Daten aus früheren Zuweisungen enthält, einschließlich Daten, die möglicherweise nicht für Buffer zugewiesen wurden.

Ein TypeError wird geworfen, wenn size keine Zahl ist.

Statische Methode: Buffer.allocUnsafe(size)#

Weist einen neuen Buffer der Größe size Bytes zu. Wenn size größer als buffer.constants.MAX_LENGTH oder kleiner als 0 ist, wird ERR_OUT_OF_RANGE geworfen.

Der zugrunde liegende Speicher für Buffer-Instanzen, die auf diese Weise erstellt werden, ist nicht initialisiert. Der Inhalt des neu erstellten Buffer ist unbekannt und kann sensible Daten enthalten. Verwenden Sie stattdessen Buffer.alloc(), um Buffer-Instanzen mit Nullen zu initialisieren.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(10);

console.log(buf);
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>

buf.fill(0);

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

const buf = Buffer.allocUnsafe(10);

console.log(buf);
// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>

buf.fill(0);

console.log(buf);
// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>

Ein TypeError wird geworfen, wenn size keine Zahl ist.

Das Buffer-Modul reserviert vorab eine interne Buffer-Instanz der Größe Buffer.poolSize, die als Pool für die schnelle Zuweisung neuer Buffer-Instanzen verwendet wird, die unter Verwendung von Buffer.allocUnsafe(), Buffer.from(array), Buffer.from(string) und Buffer.concat() erstellt werden, nur wenn size kleiner als Buffer.poolSize >>> 1 (Abrundung von Buffer.poolSize geteilt durch zwei) ist.

Die Verwendung dieses vorab reservierten internen Speicherpools ist ein Hauptunterschied zwischen dem Aufruf von Buffer.alloc(size, fill) und Buffer.allocUnsafe(size).fill(fill). Insbesondere wird Buffer.alloc(size, fill) niemals den internen Buffer-Pool verwenden, während Buffer.allocUnsafe(size).fill(fill) den internen Buffer-Pool verwenden wird, wenn size kleiner oder gleich der Hälfte von Buffer.poolSize ist. Der Unterschied ist subtil, kann aber wichtig sein, wenn eine Anwendung die zusätzliche Leistung benötigt, die Buffer.allocUnsafe() bietet.

Statische Methode: Buffer.allocUnsafeSlow(size)#

Weist einen neuen Buffer der Größe size Bytes zu. Wenn size größer als buffer.constants.MAX_LENGTH oder kleiner als 0 ist, wird ERR_OUT_OF_RANGE geworfen. Ein Buffer der Länge Null wird erstellt, wenn size 0 ist.

Der zugrunde liegende Speicher für Buffer-Instanzen, die auf diese Weise erstellt werden, ist nicht initialisiert. Der Inhalt des neu erstellten Buffer ist unbekannt und kann sensible Daten enthalten. Verwenden Sie buf.fill(0), um solche Buffer-Instanzen mit Nullen zu initialisieren.

Bei der Verwendung von Buffer.allocUnsafe() zur Zuweisung neuer Buffer-Instanzen werden Zuweisungen kleiner als Buffer.poolSize >>> 1 (4KiB, wenn die Standard-poolSize verwendet wird) aus einem einzelnen, vorab reservierten Buffer herausgeschnitten. Dies ermöglicht es Anwendungen, den Garbage-Collection-Overhead der Erstellung vieler einzeln zugewiesener Buffer-Instanzen zu vermeiden. Dieser Ansatz verbessert sowohl die Leistung als auch die Speichernutzung, indem die Notwendigkeit entfällt, so viele einzelne ArrayBuffer-Objekte zu verfolgen und aufzuräumen.

In dem Fall, dass ein Entwickler jedoch ein kleines Stück Speicher aus einem Pool für eine unbestimmte Zeit behalten muss, kann es angemessen sein, eine nicht gepoolte Buffer-Instanz unter Verwendung von Buffer.allocUnsafeSlow() zu erstellen und dann die relevanten Bits zu kopieren.

import { Buffer } from 'node:buffer';

// Need to keep around a few small chunks of memory.
const store = [];

socket.on('readable', () => {
  let data;
  while (null !== (data = readable.read())) {
    // Allocate for retained data.
    const sb = Buffer.allocUnsafeSlow(10);

    // Copy the data into the new allocation.
    data.copy(sb, 0, 0, 10);

    store.push(sb);
  }
});
const { Buffer } = require('node:buffer');

// Need to keep around a few small chunks of memory.
const store = [];

socket.on('readable', () => {
  let data;
  while (null !== (data = readable.read())) {
    // Allocate for retained data.
    const sb = Buffer.allocUnsafeSlow(10);

    // Copy the data into the new allocation.
    data.copy(sb, 0, 0, 10);

    store.push(sb);
  }
});

Ein TypeError wird geworfen, wenn size keine Zahl ist.

Statische Methode: Buffer.byteLength(string[, encoding])#

Gibt die Bytelänge eines Strings zurück, wenn dieser mit encoding kodiert ist. Dies ist nicht dasselbe wie String.prototype.length, das die Kodierung, die zum Konvertieren des Strings in Bytes verwendet wird, nicht berücksichtigt.

Für 'base64', 'base64url' und 'hex' geht diese Funktion von gültigen Eingaben aus. Für Strings, die nicht-base64/hex-kodierte Daten (z. B. Leerzeichen) enthalten, kann der Rückgabewert größer als die Länge eines aus dem String erstellten Buffer sein.

import { Buffer } from 'node:buffer';

const str = '\u00bd + \u00bc = \u00be';

console.log(`${str}: ${str.length} characters, ` +
            `${Buffer.byteLength(str, 'utf8')} bytes`);
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytes
const { Buffer } = require('node:buffer');

const str = '\u00bd + \u00bc = \u00be';

console.log(`${str}: ${str.length} characters, ` +
            `${Buffer.byteLength(str, 'utf8')} bytes`);
// Prints: ½ + ¼ = ¾: 9 characters, 12 bytes

Wenn string ein <Buffer> | <DataView> | <TypedArray> | <ArrayBuffer> | <SharedArrayBuffer> ist, wird die von .byteLength gemeldete Bytelänge zurückgegeben.

Statische Methode: Buffer.compare(buf1, buf2)#

Vergleicht buf1 mit buf2, typischerweise zum Zwecke des Sortierens von Arrays aus Buffer-Instanzen. Dies entspricht dem Aufruf von buf1.compare(buf2).

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from('1234');
const buf2 = Buffer.from('0123');
const arr = [buf1, buf2];

console.log(arr.sort(Buffer.compare));
// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
// (This result is equal to: [buf2, buf1].)
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from('1234');
const buf2 = Buffer.from('0123');
const arr = [buf1, buf2];

console.log(arr.sort(Buffer.compare));
// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]
// (This result is equal to: [buf2, buf1].)

Statische Methode: Buffer.concat(list[, totalLength])#

Gibt einen neuen Buffer zurück, der das Ergebnis der Verkettung aller Buffer-Instanzen in der list ist.

Wenn die Liste keine Elemente enthält oder wenn totalLength 0 ist, wird ein neuer Buffer der Länge Null zurückgegeben.

Wenn totalLength nicht bereitgestellt wird, wird sie aus den Buffer-Instanzen in list durch Addieren ihrer Längen berechnet.

Wenn totalLength bereitgestellt wird, muss es eine Ganzzahl ohne Vorzeichen sein. Wenn die kombinierte Länge der Buffer in list totalLength überschreitet, wird das Ergebnis auf totalLength gekürzt. Wenn die kombinierte Länge der Buffer in list kleiner als totalLength ist, wird der verbleibende Raum mit Nullen gefüllt.

import { Buffer } from 'node:buffer';

// Create a single `Buffer` from a list of three `Buffer` instances.

const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;

console.log(totalLength);
// Prints: 42

const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);

console.log(bufA);
// Prints: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// Prints: 42
const { Buffer } = require('node:buffer');

// Create a single `Buffer` from a list of three `Buffer` instances.

const buf1 = Buffer.alloc(10);
const buf2 = Buffer.alloc(14);
const buf3 = Buffer.alloc(18);
const totalLength = buf1.length + buf2.length + buf3.length;

console.log(totalLength);
// Prints: 42

const bufA = Buffer.concat([buf1, buf2, buf3], totalLength);

console.log(bufA);
// Prints: <Buffer 00 00 00 00 ...>
console.log(bufA.length);
// Prints: 42

Buffer.concat() kann ebenfalls den internen Buffer-Pool verwenden, wie es Buffer.allocUnsafe() tut.

Statische Methode: Buffer.copyBytesFrom(view[, offset[, length]])#

  • view <TypedArray> Das zu kopierende <TypedArray>.
  • offset <integer> Der Start-Offset innerhalb von view. Standard: 0.
  • length <integer> Die Anzahl der Elemente aus view, die kopiert werden sollen. Standard: view.length - offset.
  • Rückgabewert: <Buffer>

Kopiert den zugrunde liegenden Speicher von view in einen neuen Buffer.

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

Statische Methode: Buffer.from(array)#

Weist einen neuen Buffer unter Verwendung eines array von Bytes im Bereich 0255 zu. Array-Einträge außerhalb dieses Bereichs werden abgeschnitten, um hineinzupassen.

import { Buffer } from 'node:buffer';

// Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);
const { Buffer } = require('node:buffer');

// Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.
const buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);

Wenn array ein array-ähnliches Objekt ist (d. h. eines mit einer length-Eigenschaft vom Typ number), wird es wie ein Array behandelt, es sei denn, es ist ein Buffer oder ein Uint8Array. Das bedeutet, dass alle anderen TypedArray-Varianten als Array behandelt werden. Um einen Buffer aus den Bytes zu erstellen, die ein TypedArray stützen, verwenden Sie Buffer.copyBytesFrom().

Ein TypeError wird geworfen, wenn array kein Array oder ein anderer für Buffer.from()-Varianten geeigneter Typ ist.

Buffer.from(array) und Buffer.from(string) können ebenfalls den internen Buffer-Pool verwenden, wie es Buffer.allocUnsafe() tut.

Statische Methode: Buffer.from(arrayBuffer[, byteOffset[, length]])#

Dies erstellt eine Ansicht des <ArrayBuffer>, ohne den zugrunde liegenden Speicher zu kopieren. Zum Beispiel, wenn eine Referenz auf die .buffer-Eigenschaft einer <TypedArray>-Instanz übergeben wird, teilt sich der neu erstellte Buffer denselben zugewiesenen Speicher wie der zugrunde liegende ArrayBuffer des <TypedArray>.

import { Buffer } from 'node:buffer';

const arr = new Uint16Array(2);

arr[0] = 5000;
arr[1] = 4000;

// Shares memory with `arr`.
const buf = Buffer.from(arr.buffer);

console.log(buf);
// Prints: <Buffer 88 13 a0 0f>

// Changing the original Uint16Array changes the Buffer also.
arr[1] = 6000;

console.log(buf);
// Prints: <Buffer 88 13 70 17>
const { Buffer } = require('node:buffer');

const arr = new Uint16Array(2);

arr[0] = 5000;
arr[1] = 4000;

// Shares memory with `arr`.
const buf = Buffer.from(arr.buffer);

console.log(buf);
// Prints: <Buffer 88 13 a0 0f>

// Changing the original Uint16Array changes the Buffer also.
arr[1] = 6000;

console.log(buf);
// Prints: <Buffer 88 13 70 17>

Die optionalen Argumente byteOffset und length spezifizieren einen Speicherbereich innerhalb des arrayBuffer, der vom Buffer geteilt wird.

import { Buffer } from 'node:buffer';

const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);

console.log(buf.length);
// Prints: 2
const { Buffer } = require('node:buffer');

const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);

console.log(buf.length);
// Prints: 2

Ein TypeError wird geworfen, wenn arrayBuffer kein <ArrayBuffer> oder <SharedArrayBuffer> oder ein anderer für Buffer.from()-Varianten geeigneter Typ ist.

Es ist wichtig, daran zu denken, dass ein zugrunde liegender ArrayBuffer einen Speicherbereich abdecken kann, der über die Grenzen einer TypedArray-Ansicht hinausgeht. Ein neuer Buffer, der unter Verwendung der buffer-Eigenschaft eines TypedArray erstellt wurde, kann über den Bereich des TypedArray hinausgehen

import { Buffer } from 'node:buffer';

const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
console.log(arrA.buffer === arrB.buffer); // true

const buf = Buffer.from(arrB.buffer);
console.log(buf);
// Prints: <Buffer 63 64 65 66>
const { Buffer } = require('node:buffer');

const arrA = Uint8Array.from([0x63, 0x64, 0x65, 0x66]); // 4 elements
const arrB = new Uint8Array(arrA.buffer, 1, 2); // 2 elements
console.log(arrA.buffer === arrB.buffer); // true

const buf = Buffer.from(arrB.buffer);
console.log(buf);
// Prints: <Buffer 63 64 65 66>

Statische Methode: Buffer.from(buffer)#

Kopiert die übergebenen buffer-Daten auf eine neue Buffer-Instanz.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from('buffer');
const buf2 = Buffer.from(buf1);

buf1[0] = 0x61;

console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: buffer
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from('buffer');
const buf2 = Buffer.from(buf1);

buf1[0] = 0x61;

console.log(buf1.toString());
// Prints: auffer
console.log(buf2.toString());
// Prints: buffer

Ein TypeError wird geworfen, wenn buffer kein Buffer oder ein anderer für Buffer.from()-Varianten geeigneter Typ ist.

Statische Methode: Buffer.from(object[, offsetOrEncoding[, length]])#

  • object <Object> Ein Objekt, das Symbol.toPrimitive oder valueOf() unterstützt.
  • offsetOrEncoding <integer> | <string> Ein Byte-Offset oder eine Kodierung.
  • length <integer> Eine Länge.
  • Rückgabewert: <Buffer>

Für Objekte, deren valueOf()-Funktion einen Wert zurückgibt, der nicht strikt gleich object ist, gibt es Buffer.from(object.valueOf(), offsetOrEncoding, length) zurück.

import { Buffer } from 'node:buffer';

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

const buf = Buffer.from(new String('this is a test'));
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>

Für Objekte, die Symbol.toPrimitive unterstützen, gibt es Buffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding) zurück.

import { Buffer } from 'node:buffer';

class Foo {
  [Symbol.toPrimitive]() {
    return 'this is a test';
  }
}

const buf = Buffer.from(new Foo(), 'utf8');
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>
const { Buffer } = require('node:buffer');

class Foo {
  [Symbol.toPrimitive]() {
    return 'this is a test';
  }
}

const buf = Buffer.from(new Foo(), 'utf8');
// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>

Ein TypeError wird geworfen, wenn object die genannten Methoden nicht hat oder kein anderer für Buffer.from()-Varianten geeigneter Typ ist.

Statische Methode: Buffer.from(string[, encoding])#

  • string <string> Ein zu kodierender String.
  • encoding <string> Die Kodierung von string. Standard: 'utf8'.
  • Rückgabewert: <Buffer>

Erstellt einen neuen Buffer, der string enthält. Der encoding-Parameter identifiziert die Zeichenkodierung, die beim Konvertieren von string in Bytes verwendet werden soll.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');

console.log(buf1.toString());
// Prints: this is a tést
console.log(buf2.toString());
// Prints: this is a tést
console.log(buf1.toString('latin1'));
// Prints: this is a tést
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from('this is a tést');
const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');

console.log(buf1.toString());
// Prints: this is a tést
console.log(buf2.toString());
// Prints: this is a tést
console.log(buf1.toString('latin1'));
// Prints: this is a tést

Ein TypeError wird geworfen, wenn string kein String oder ein anderer für Buffer.from()-Varianten geeigneter Typ ist.

Buffer.from(string) kann ebenfalls den internen Buffer-Pool verwenden, wie es Buffer.allocUnsafe() tut.

Statische Methode: Buffer.isBuffer(obj)#

Gibt true zurück, wenn obj ein Buffer ist, sonst false.

import { Buffer } from 'node:buffer';

Buffer.isBuffer(Buffer.alloc(10)); // true
Buffer.isBuffer(Buffer.from('foo')); // true
Buffer.isBuffer('a string'); // false
Buffer.isBuffer([]); // false
Buffer.isBuffer(new Uint8Array(1024)); // false
const { Buffer } = require('node:buffer');

Buffer.isBuffer(Buffer.alloc(10)); // true
Buffer.isBuffer(Buffer.from('foo')); // true
Buffer.isBuffer('a string'); // false
Buffer.isBuffer([]); // false
Buffer.isBuffer(new Uint8Array(1024)); // false

Statische Methode: Buffer.isEncoding(encoding)#

  • encoding <string> Ein Name einer Zeichenkodierung zur Überprüfung.
  • Rückgabewert: <boolean>

Gibt true zurück, wenn encoding der Name einer unterstützten Zeichenkodierung ist, oder sonst false.

import { Buffer } from 'node:buffer';

console.log(Buffer.isEncoding('utf8'));
// Prints: true

console.log(Buffer.isEncoding('hex'));
// Prints: true

console.log(Buffer.isEncoding('utf/8'));
// Prints: false

console.log(Buffer.isEncoding(''));
// Prints: false
const { Buffer } = require('node:buffer');

console.log(Buffer.isEncoding('utf8'));
// Prints: true

console.log(Buffer.isEncoding('hex'));
// Prints: true

console.log(Buffer.isEncoding('utf/8'));
// Prints: false

console.log(Buffer.isEncoding(''));
// Prints: false

Buffer.poolSize#

Dies ist die Größe (in Bytes) der vorab zugewiesenen internen Buffer-Instanzen, die für das Pooling verwendet werden. Dieser Wert kann modifiziert werden.

buf[index]#

Der Index-Operator [index] kann verwendet werden, um das Oktett an der Position index in buf abzurufen und zu setzen. Die Werte beziehen sich auf einzelne Bytes, daher liegt der zulässige Wertebereich zwischen 0x00 und 0xFF (hex) oder 0 und 255 (dezimal).

Dieser Operator wird von Uint8Array geerbt, daher ist sein Verhalten bei Zugriff außerhalb der Grenzen dasselbe wie bei Uint8Array. Mit anderen Worten, buf[index] gibt undefined zurück, wenn index negativ oder größer oder gleich buf.length ist, und buf[index] = value modifiziert den Puffer nicht, wenn index negativ ist oder >= buf.length.

import { Buffer } from 'node:buffer';

// Copy an ASCII string into a `Buffer` one byte at a time.
// (This only works for ASCII-only strings. In general, one should use
// `Buffer.from()` to perform this conversion.)

const str = 'Node.js';
const buf = Buffer.allocUnsafe(str.length);

for (let i = 0; i < str.length; i++) {
  buf[i] = str.charCodeAt(i);
}

console.log(buf.toString('utf8'));
// Prints: Node.js
const { Buffer } = require('node:buffer');

// Copy an ASCII string into a `Buffer` one byte at a time.
// (This only works for ASCII-only strings. In general, one should use
// `Buffer.from()` to perform this conversion.)

const str = 'Node.js';
const buf = Buffer.allocUnsafe(str.length);

for (let i = 0; i < str.length; i++) {
  buf[i] = str.charCodeAt(i);
}

console.log(buf.toString('utf8'));
// Prints: Node.js

buf.buffer#

  • Typ: <ArrayBuffer> Das zugrunde liegende ArrayBuffer-Objekt, auf dessen Basis dieses Buffer-Objekt erstellt wurde.

Es ist nicht garantiert, dass dieser ArrayBuffer exakt dem ursprünglichen Buffer entspricht. Siehe die Hinweise zu buf.byteOffset für Details.

import { Buffer } from 'node:buffer';

const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);

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

const arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);

console.log(buffer.buffer === arrayBuffer);
// Prints: true

buf.byteOffset#

  • Typ: <integer> Der byteOffset des zugrunde liegenden ArrayBuffer-Objekts des Buffer.

Beim Setzen von byteOffset in Buffer.from(ArrayBuffer, byteOffset, length), oder manchmal beim Zuweisen eines Buffer, der kleiner als Buffer.poolSize ist, beginnt der Puffer nicht bei einem Null-Offset auf dem zugrunde liegenden ArrayBuffer.

Dies kann Probleme verursachen, wenn direkt auf den zugrunde liegenden ArrayBuffer unter Verwendung von buf.buffer zugegriffen wird, da andere Teile des ArrayBuffer möglicherweise in keinem Zusammenhang mit dem Buffer-Objekt selbst stehen.

Ein häufiges Problem beim Erstellen eines TypedArray-Objekts, das seinen Speicher mit einem Buffer teilt, ist, dass man in diesem Fall den byteOffset korrekt angeben muss

import { Buffer } from 'node:buffer';

// Create a buffer smaller than `Buffer.poolSize`.
const nodeBuffer = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

// When casting the Node.js Buffer to an Int8Array, use the byteOffset
// to refer only to the part of `nodeBuffer.buffer` that contains the memory
// for `nodeBuffer`.
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);
const { Buffer } = require('node:buffer');

// Create a buffer smaller than `Buffer.poolSize`.
const nodeBuffer = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

// When casting the Node.js Buffer to an Int8Array, use the byteOffset
// to refer only to the part of `nodeBuffer.buffer` that contains the memory
// for `nodeBuffer`.
new Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);

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

  • target <Buffer> | <Uint8Array> Ein Buffer oder <Uint8Array>, mit dem buf verglichen werden soll.
  • targetStart <integer> Der Offset innerhalb von target, an dem der Vergleich beginnen soll. Standard: 0.
  • targetEnd <integer> Der Offset innerhalb von target, an dem der Vergleich enden soll (nicht inklusive). Standard: target.length.
  • sourceStart <integer> Der Offset innerhalb von buf, an dem der Vergleich beginnen soll. Standard: 0.
  • sourceEnd <integer> Der Offset innerhalb von buf, an dem der Vergleich enden soll (nicht inklusive). Standard: buf.length.
  • Gibt zurück: <integer>

Vergleicht buf mit target und gibt eine Zahl zurück, die angibt, ob buf in der Sortierreihenfolge vor, nach oder gleich target kommt. Der Vergleich basiert auf der tatsächlichen Sequenz von Bytes in jedem Buffer.

  • 0 wird zurückgegeben, wenn target gleich buf ist
  • 1 wird zurückgegeben, wenn target beim Sortieren vor buf kommen sollte.
  • -1 wird zurückgegeben, wenn target beim Sortieren nach buf kommen sollte.
import { Buffer } from 'node:buffer';

const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('BCD');
const buf3 = Buffer.from('ABCD');

console.log(buf1.compare(buf1));
// Prints: 0
console.log(buf1.compare(buf2));
// Prints: -1
console.log(buf1.compare(buf3));
// Prints: -1
console.log(buf2.compare(buf1));
// Prints: 1
console.log(buf2.compare(buf3));
// Prints: 1
console.log([buf1, buf2, buf3].sort(Buffer.compare));
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
// (This result is equal to: [buf1, buf3, buf2].)
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('BCD');
const buf3 = Buffer.from('ABCD');

console.log(buf1.compare(buf1));
// Prints: 0
console.log(buf1.compare(buf2));
// Prints: -1
console.log(buf1.compare(buf3));
// Prints: -1
console.log(buf2.compare(buf1));
// Prints: 1
console.log(buf2.compare(buf3));
// Prints: 1
console.log([buf1, buf2, buf3].sort(Buffer.compare));
// Prints: [ <Buffer 41 42 43>, <Buffer 41 42 43 44>, <Buffer 42 43 44> ]
// (This result is equal to: [buf1, buf3, buf2].)

Die optionalen Argumente targetStart, targetEnd, sourceStart und sourceEnd können verwendet werden, um den Vergleich auf spezifische Bereiche innerhalb von target bzw. buf zu beschränken.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);

console.log(buf1.compare(buf2, 5, 9, 0, 4));
// Prints: 0
console.log(buf1.compare(buf2, 0, 6, 4));
// Prints: -1
console.log(buf1.compare(buf2, 5, 6, 5));
// Prints: 1
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8, 9]);
const buf2 = Buffer.from([5, 6, 7, 8, 9, 1, 2, 3, 4]);

console.log(buf1.compare(buf2, 5, 9, 0, 4));
// Prints: 0
console.log(buf1.compare(buf2, 0, 6, 4));
// Prints: -1
console.log(buf1.compare(buf2, 5, 6, 5));
// Prints: 1

ERR_OUT_OF_RANGE wird geworfen, wenn targetStart < 0, sourceStart < 0, targetEnd > target.byteLength oder sourceEnd > source.byteLength.

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

  • target <Buffer> | <Uint8Array> Ein Buffer oder <Uint8Array>, in das kopiert werden soll.
  • targetStart <integer> Der Offset innerhalb von target, an dem das Schreiben beginnen soll. Standard: 0.
  • sourceStart <integer> Der Offset innerhalb von buf, ab dem das Kopieren beginnen soll. Standard: 0.
  • sourceEnd <integer> Der Offset innerhalb von buf, an dem das Kopieren enden soll (nicht inklusive). Standard: buf.length.
  • Gibt zurück: <integer> Die Anzahl der kopierten Bytes.

Kopiert Daten aus einer Region von buf in eine Region in target, selbst wenn der Speicherbereich von target mit buf überlappt.

TypedArray.prototype.set() führt dieselbe Operation aus und ist für alle TypedArrays verfügbar, einschließlich Node.js Buffer, obwohl es andere Funktionsargumente annimmt.

import { Buffer } from 'node:buffer';

// Create two `Buffer` instances.
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf1[i] = i + 97;
}

// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
buf1.copy(buf2, 8, 16, 20);
// This is equivalent to:
// buf2.set(buf1.subarray(16, 20), 8);

console.log(buf2.toString('ascii', 0, 25));
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!
const { Buffer } = require('node:buffer');

// Create two `Buffer` instances.
const buf1 = Buffer.allocUnsafe(26);
const buf2 = Buffer.allocUnsafe(26).fill('!');

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf1[i] = i + 97;
}

// Copy `buf1` bytes 16 through 19 into `buf2` starting at byte 8 of `buf2`.
buf1.copy(buf2, 8, 16, 20);
// This is equivalent to:
// buf2.set(buf1.subarray(16, 20), 8);

console.log(buf2.toString('ascii', 0, 25));
// Prints: !!!!!!!!qrst!!!!!!!!!!!!!
import { Buffer } from 'node:buffer';

// Create a `Buffer` and copy data from one region to an overlapping region
// within the same `Buffer`.

const buf = Buffer.allocUnsafe(26);

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf[i] = i + 97;
}

buf.copy(buf, 0, 4, 10);

console.log(buf.toString());
// Prints: efghijghijklmnopqrstuvwxyz
const { Buffer } = require('node:buffer');

// Create a `Buffer` and copy data from one region to an overlapping region
// within the same `Buffer`.

const buf = Buffer.allocUnsafe(26);

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf[i] = i + 97;
}

buf.copy(buf, 0, 4, 10);

console.log(buf.toString());
// Prints: efghijghijklmnopqrstuvwxyz

buf.entries()#

Erstellt und gibt einen Iterator von [index, byte]-Paaren aus dem Inhalt von buf zurück.

import { Buffer } from 'node:buffer';

// Log the entire contents of a `Buffer`.

const buf = Buffer.from('buffer');

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

// Log the entire contents of a `Buffer`.

const buf = Buffer.from('buffer');

for (const pair of buf.entries()) {
  console.log(pair);
}
// Prints:
//   [0, 98]
//   [1, 117]
//   [2, 102]
//   [3, 102]
//   [4, 101]
//   [5, 114]

buf.equals(otherBuffer)#

Gibt true zurück, wenn sowohl buf als auch otherBuffer exakt dieselben Bytes haben, sonst false. Entspricht buf.compare(otherBuffer) === 0.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');

console.log(buf1.equals(buf2));
// Prints: true
console.log(buf1.equals(buf3));
// Prints: false
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');

console.log(buf1.equals(buf2));
// Prints: true
console.log(buf1.equals(buf3));
// Prints: false

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

  • value <string> | <Buffer> | <Uint8Array> | <integer> Der Wert, mit dem buf gefüllt werden soll. Ein leerer Wert (String, Uint8Array, Buffer) wird zu 0 gezwungen.
  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Füllen von buf begonnen wird. Standard: 0.
  • end <integer> Wo das Füllen von buf gestoppt werden soll (nicht inklusive). Standard: buf.length.
  • encoding <string> Die Kodierung für value, wenn value ein String ist. Standard: 'utf8'.
  • Gibt zurück: <Buffer> Eine Referenz auf buf.

Füllt buf mit dem angegebenen value. Wenn offset und end nicht angegeben sind, wird der gesamte buf gefüllt

import { Buffer } from 'node:buffer';

// Fill a `Buffer` with the ASCII character 'h'.

const b = Buffer.allocUnsafe(50).fill('h');

console.log(b.toString());
// Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

// Fill a buffer with empty string
const c = Buffer.allocUnsafe(5).fill('');

console.log(c.fill(''));
// Prints: <Buffer 00 00 00 00 00>
const { Buffer } = require('node:buffer');

// Fill a `Buffer` with the ASCII character 'h'.

const b = Buffer.allocUnsafe(50).fill('h');

console.log(b.toString());
// Prints: hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

// Fill a buffer with empty string
const c = Buffer.allocUnsafe(5).fill('');

console.log(c.fill(''));
// Prints: <Buffer 00 00 00 00 00>

value wird zu einem uint32-Wert gezwungen, wenn es kein String, Buffer oder eine Ganzzahl ist. Wenn die resultierende Ganzzahl größer als 255 (dezimal) ist, wird buf mit value & 255 gefüllt.

Wenn das letzte Schreiben eines fill()-Vorgangs auf ein Multi-Byte-Zeichen fällt, dann werden nur die Bytes dieses Zeichens geschrieben, die in buf passen

import { Buffer } from 'node:buffer';

// Fill a `Buffer` with character that takes up two bytes in UTF-8.

console.log(Buffer.allocUnsafe(5).fill('\u0222'));
// Prints: <Buffer c8 a2 c8 a2 c8>
const { Buffer } = require('node:buffer');

// Fill a `Buffer` with character that takes up two bytes in UTF-8.

console.log(Buffer.allocUnsafe(5).fill('\u0222'));
// Prints: <Buffer c8 a2 c8 a2 c8>

Wenn value ungültige Zeichen enthält, wird es abgeschnitten; wenn keine gültigen Fülldaten verbleiben, wird eine Exception geworfen

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(5);

console.log(buf.fill('a'));
// Prints: <Buffer 61 61 61 61 61>
console.log(buf.fill('aazz', 'hex'));
// Prints: <Buffer aa aa aa aa aa>
console.log(buf.fill('zz', 'hex'));
// Throws an exception.
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(5);

console.log(buf.fill('a'));
// Prints: <Buffer 61 61 61 61 61>
console.log(buf.fill('aazz', 'hex'));
// Prints: <Buffer aa aa aa aa aa>
console.log(buf.fill('zz', 'hex'));
// Throws an exception.

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

  • value <string> | <Buffer> | <Uint8Array> | <integer> Wonach gesucht werden soll.
  • byteOffset <integer> Wo in buf mit der Suche begonnen werden soll. Wenn negativ, wird der Offset vom Ende von buf aus berechnet. Standard: 0.
  • encoding <string> Wenn value ein String ist, ist dies dessen Kodierung. Standard: 'utf8'.
  • Gibt zurück: <boolean> true, wenn value in buf gefunden wurde, sonst false.

Entspricht buf.indexOf() !== -1.

import { Buffer } from 'node:buffer';

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));
// Prints: true (97 is the decimal ASCII value for 'a')
console.log(buf.includes(Buffer.from('a buffer example')));
// Prints: false
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
// Prints: true
console.log(buf.includes('this', 4));
// Prints: false
const { Buffer } = require('node:buffer');

const buf = Buffer.from('this is a buffer');

console.log(buf.includes('this'));
// Prints: true
console.log(buf.includes('is'));
// Prints: true
console.log(buf.includes(Buffer.from('a buffer')));
// Prints: true
console.log(buf.includes(97));
// Prints: true (97 is the decimal ASCII value for 'a')
console.log(buf.includes(Buffer.from('a buffer example')));
// Prints: false
console.log(buf.includes(Buffer.from('a buffer example').slice(0, 8)));
// Prints: true
console.log(buf.includes('this', 4));
// Prints: false

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

  • value <string> | <Buffer> | <Uint8Array> | <integer> Wonach gesucht werden soll.
  • byteOffset <integer> Wo in buf mit der Suche begonnen werden soll. Wenn negativ, wird der Offset vom Ende von buf aus berechnet. Standard: 0.
  • encoding <string> Wenn value ein String ist, ist dies die Kodierung, die verwendet wird, um die Binärdarstellung des Strings zu bestimmen, nach der in buf gesucht wird. Standard: 'utf8'.
  • Gibt zurück: <integer> Der Index des ersten Vorkommens von value in buf, oder -1, wenn buf keinen value enthält.

Wenn value ist

  • ein String, wird value gemäß der Zeichenkodierung in encoding interpretiert.
  • ein Buffer oder <Uint8Array>, wird value in seiner Gesamtheit verwendet. Um einen teilweisen Buffer zu vergleichen, verwenden Sie buf.subarray.
  • eine Zahl, wird value als eine Ganzzahl ohne Vorzeichen von 8 Bit zwischen 0 und 255 interpretiert.
import { Buffer } from 'node:buffer';

const buf = Buffer.from('this is a buffer');

console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8

const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6
const { Buffer } = require('node:buffer');

const buf = Buffer.from('this is a buffer');

console.log(buf.indexOf('this'));
// Prints: 0
console.log(buf.indexOf('is'));
// Prints: 2
console.log(buf.indexOf(Buffer.from('a buffer')));
// Prints: 8
console.log(buf.indexOf(97));
// Prints: 8 (97 is the decimal ASCII value for 'a')
console.log(buf.indexOf(Buffer.from('a buffer example')));
// Prints: -1
console.log(buf.indexOf(Buffer.from('a buffer example').slice(0, 8)));
// Prints: 8

const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

console.log(utf16Buffer.indexOf('\u03a3', 0, 'utf16le'));
// Prints: 4
console.log(utf16Buffer.indexOf('\u03a3', -4, 'utf16le'));
// Prints: 6

Wenn value kein String, keine Zahl oder kein Buffer ist, wirft diese Methode einen TypeError. Wenn value eine Zahl ist, wird sie in einen gültigen Byte-Wert, eine Ganzzahl zwischen 0 und 255, gezwungen.

Wenn byteOffset keine Zahl ist, wird sie in eine Zahl gezwungen. Wenn das Ergebnis der Erzwingung NaN oder 0 ist, wird der gesamte Puffer durchsucht. Dieses Verhalten entspricht String.prototype.indexOf().

import { Buffer } from 'node:buffer';

const b = Buffer.from('abcdef');

// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));

// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));
const { Buffer } = require('node:buffer');

const b = Buffer.from('abcdef');

// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.indexOf(99.9));
console.log(b.indexOf(256 + 99));

// Passing a byteOffset that coerces to NaN or 0.
// Prints: 1, searching the whole buffer.
console.log(b.indexOf('b', undefined));
console.log(b.indexOf('b', {}));
console.log(b.indexOf('b', null));
console.log(b.indexOf('b', []));

Wenn value ein leerer String oder ein leerer Buffer ist und byteOffset kleiner als buf.length ist, wird byteOffset zurückgegeben. Wenn value leer ist und byteOffset mindestens buf.length ist, wird buf.length zurückgegeben.

buf.keys()#

Erstellt und gibt einen Iterator von buf-Schlüsseln (Indizes) zurück.

import { Buffer } from 'node:buffer';

const buf = Buffer.from('buffer');

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

const buf = Buffer.from('buffer');

for (const key of buf.keys()) {
  console.log(key);
}
// Prints:
//   0
//   1
//   2
//   3
//   4
//   5

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

  • value <string> | <Buffer> | <Uint8Array> | <integer> Wonach gesucht werden soll.
  • byteOffset <integer> Wo in buf mit der Suche begonnen werden soll. Wenn negativ, wird der Offset vom Ende von buf aus berechnet. Standard: buf.length - 1.
  • encoding <string> Wenn value ein String ist, ist dies die Kodierung, die verwendet wird, um die Binärdarstellung des Strings zu bestimmen, nach der in buf gesucht wird. Standard: 'utf8'.
  • Gibt zurück: <integer> Der Index des letzten Vorkommens von value in buf, oder -1, wenn buf keinen value enthält.

Identisch mit buf.indexOf(), außer dass das letzte Vorkommen von value anstelle des ersten Vorkommens gefunden wird.

import { Buffer } from 'node:buffer';

const buf = Buffer.from('this buffer is a buffer');

console.log(buf.lastIndexOf('this'));
// Prints: 0
console.log(buf.lastIndexOf('buffer'));
// Prints: 17
console.log(buf.lastIndexOf(Buffer.from('buffer')));
// Prints: 17
console.log(buf.lastIndexOf(97));
// Prints: 15 (97 is the decimal ASCII value for 'a')
console.log(buf.lastIndexOf(Buffer.from('yolo')));
// Prints: -1
console.log(buf.lastIndexOf('buffer', 5));
// Prints: 5
console.log(buf.lastIndexOf('buffer', 4));
// Prints: -1

const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
// Prints: 6
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
// Prints: 4
const { Buffer } = require('node:buffer');

const buf = Buffer.from('this buffer is a buffer');

console.log(buf.lastIndexOf('this'));
// Prints: 0
console.log(buf.lastIndexOf('buffer'));
// Prints: 17
console.log(buf.lastIndexOf(Buffer.from('buffer')));
// Prints: 17
console.log(buf.lastIndexOf(97));
// Prints: 15 (97 is the decimal ASCII value for 'a')
console.log(buf.lastIndexOf(Buffer.from('yolo')));
// Prints: -1
console.log(buf.lastIndexOf('buffer', 5));
// Prints: 5
console.log(buf.lastIndexOf('buffer', 4));
// Prints: -1

const utf16Buffer = Buffer.from('\u039a\u0391\u03a3\u03a3\u0395', 'utf16le');

console.log(utf16Buffer.lastIndexOf('\u03a3', undefined, 'utf16le'));
// Prints: 6
console.log(utf16Buffer.lastIndexOf('\u03a3', -5, 'utf16le'));
// Prints: 4

Wenn value kein String, keine Zahl oder kein Buffer ist, wirft diese Methode einen TypeError. Wenn value eine Zahl ist, wird sie in einen gültigen Byte-Wert, eine Ganzzahl zwischen 0 und 255, gezwungen.

Wenn byteOffset keine Zahl ist, wird sie in eine Zahl gezwungen. Alle Argumente, die zu NaN führen, wie {} oder undefined, durchsuchen den gesamten Puffer. Dieses Verhalten entspricht String.prototype.lastIndexOf().

import { Buffer } from 'node:buffer';

const b = Buffer.from('abcdef');

// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.lastIndexOf(99.9));
console.log(b.lastIndexOf(256 + 99));

// Passing a byteOffset that coerces to NaN.
// Prints: 1, searching the whole buffer.
console.log(b.lastIndexOf('b', undefined));
console.log(b.lastIndexOf('b', {}));

// Passing a byteOffset that coerces to 0.
// Prints: -1, equivalent to passing 0.
console.log(b.lastIndexOf('b', null));
console.log(b.lastIndexOf('b', []));
const { Buffer } = require('node:buffer');

const b = Buffer.from('abcdef');

// Passing a value that's a number, but not a valid byte.
// Prints: 2, equivalent to searching for 99 or 'c'.
console.log(b.lastIndexOf(99.9));
console.log(b.lastIndexOf(256 + 99));

// Passing a byteOffset that coerces to NaN.
// Prints: 1, searching the whole buffer.
console.log(b.lastIndexOf('b', undefined));
console.log(b.lastIndexOf('b', {}));

// Passing a byteOffset that coerces to 0.
// Prints: -1, equivalent to passing 0.
console.log(b.lastIndexOf('b', null));
console.log(b.lastIndexOf('b', []));

Wenn value ein leerer String oder ein leerer Buffer ist, wird byteOffset zurückgegeben.

buf.length#

Gibt die Anzahl der Bytes in buf zurück.

import { Buffer } from 'node:buffer';

// Create a `Buffer` and write a shorter string to it using UTF-8.

const buf = Buffer.alloc(1234);

console.log(buf.length);
// Prints: 1234

buf.write('some string', 0, 'utf8');

console.log(buf.length);
// Prints: 1234
const { Buffer } = require('node:buffer');

// Create a `Buffer` and write a shorter string to it using UTF-8.

const buf = Buffer.alloc(1234);

console.log(buf.length);
// Prints: 1234

buf.write('some string', 0, 'utf8');

console.log(buf.length);
// Prints: 1234

buf.parent#

Stabilität: 0 - Veraltet: Verwenden Sie stattdessen buf.buffer.

Die Eigenschaft buf.parent ist ein veralteter Alias für buf.buffer.

buf.readBigInt64BE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <bigint>

Liest eine vorzeichenbehaftete Big-Endian 64-Bit-Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

buf.readBigInt64LE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <bigint>

Liest eine vorzeichenbehaftete Little-Endian 64-Bit-Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

buf.readBigUInt64BE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <bigint>

Liest eine Ganzzahl ohne Vorzeichen, Big-Endian 64-Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readBigUint64BE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);

console.log(buf.readBigUInt64BE(0));
// Prints: 4294967295n
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);

console.log(buf.readBigUInt64BE(0));
// Prints: 4294967295n

buf.readBigUInt64LE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <bigint>

Liest eine Ganzzahl ohne Vorzeichen, Little-Endian 64-Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readBigUint64LE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);

console.log(buf.readBigUInt64LE(0));
// Prints: 18446744069414584320n
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);

console.log(buf.readBigUInt64LE(0));
// Prints: 18446744069414584320n

buf.readDoubleBE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <number>

Liest einen 64-Bit Big-Endian Double aus buf an der angegebenen offset.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);

console.log(buf.readDoubleBE(0));
// Prints: 8.20788039913184e-304
const { Buffer } = require('node:buffer');

const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);

console.log(buf.readDoubleBE(0));
// Prints: 8.20788039913184e-304

buf.readDoubleLE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <number>

Liest einen 64-Bit Little-Endian Double aus buf an der angegebenen offset.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);

console.log(buf.readDoubleLE(0));
// Prints: 5.447603722011605e-270
console.log(buf.readDoubleLE(1));
// Throws ERR_OUT_OF_RANGE.
const { Buffer } = require('node:buffer');

const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);

console.log(buf.readDoubleLE(0));
// Prints: 5.447603722011605e-270
console.log(buf.readDoubleLE(1));
// Throws ERR_OUT_OF_RANGE.

buf.readFloatBE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 4. Standard: 0.
  • Gibt zurück: <number>

Liest einen 32-Bit Big-Endian Float aus buf an der angegebenen offset.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, 2, 3, 4]);

console.log(buf.readFloatBE(0));
// Prints: 2.387939260590663e-38
const { Buffer } = require('node:buffer');

const buf = Buffer.from([1, 2, 3, 4]);

console.log(buf.readFloatBE(0));
// Prints: 2.387939260590663e-38

buf.readFloatLE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 4. Standard: 0.
  • Gibt zurück: <number>

Liest einen 32-Bit Little-Endian Float aus buf an der angegebenen offset.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, 2, 3, 4]);

console.log(buf.readFloatLE(0));
// Prints: 1.539989614439558e-36
console.log(buf.readFloatLE(1));
// Throws ERR_OUT_OF_RANGE.
const { Buffer } = require('node:buffer');

const buf = Buffer.from([1, 2, 3, 4]);

console.log(buf.readFloatLE(0));
// Prints: 1.539989614439558e-36
console.log(buf.readFloatLE(1));
// Throws ERR_OUT_OF_RANGE.

buf.readInt8([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 1. Standard: 0.
  • Gibt zurück: <integer>

Liest eine vorzeichenbehaftete 8-Bit Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([-1, 5]);

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

const buf = Buffer.from([-1, 5]);

console.log(buf.readInt8(0));
// Prints: -1
console.log(buf.readInt8(1));
// Prints: 5
console.log(buf.readInt8(2));
// Throws ERR_OUT_OF_RANGE.

buf.readInt16BE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 2. Standard: 0.
  • Gibt zurück: <integer>

Liest eine vorzeichenbehaftete Big-Endian 16-Bit Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0, 5]);

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

const buf = Buffer.from([0, 5]);

console.log(buf.readInt16BE(0));
// Prints: 5

buf.readInt16LE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 2. Standard: 0.
  • Gibt zurück: <integer>

Liest eine vorzeichenbehaftete Little-Endian 16-Bit Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0, 5]);

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

const buf = Buffer.from([0, 5]);

console.log(buf.readInt16LE(0));
// Prints: 1280
console.log(buf.readInt16LE(1));
// Throws ERR_OUT_OF_RANGE.

buf.readInt32BE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 4. Standard: 0.
  • Gibt zurück: <integer>

Liest eine vorzeichenbehaftete Big-Endian 32-Bit Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0, 0, 0, 5]);

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

const buf = Buffer.from([0, 0, 0, 5]);

console.log(buf.readInt32BE(0));
// Prints: 5

buf.readInt32LE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 4. Standard: 0.
  • Gibt zurück: <integer>

Liest eine vorzeichenbehaftete Little-Endian 32-Bit Ganzzahl aus buf an der angegebenen offset.

Ganzzahlen, die aus einem Buffer gelesen werden, werden als Zweierkomplement-vorzeichenbehaftete Werte interpretiert.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0, 0, 0, 5]);

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

const buf = Buffer.from([0, 0, 0, 5]);

console.log(buf.readInt32LE(0));
// Prints: 83886080
console.log(buf.readInt32LE(1));
// Throws ERR_OUT_OF_RANGE.

buf.readIntBE(offset, byteLength)#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - byteLength.
  • byteLength <integer> Anzahl der zu lesenden Bytes. Muss erfüllen: 0 < byteLength <= 6.
  • Gibt zurück: <integer>

Liest byteLength Bytes aus buf an der angegebenen offset und interpretiert das Ergebnis als eine Big-Endian-Zweierkomplement-Ganzzahl mit Vorzeichen, die eine Genauigkeit von bis zu 48 Bit unterstützt.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.
console.log(buf.readIntBE(1, 0).toString(16));
// Throws ERR_OUT_OF_RANGE.
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.
console.log(buf.readIntBE(1, 0).toString(16));
// Throws ERR_OUT_OF_RANGE.

buf.readIntLE(offset, byteLength)#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - byteLength.
  • byteLength <integer> Anzahl der zu lesenden Bytes. Muss erfüllen: 0 < byteLength <= 6.
  • Gibt zurück: <integer>

Liest byteLength Bytes aus buf an der angegebenen offset und interpretiert das Ergebnis als eine Little-Endian-Zweierkomplement-Ganzzahl mit Vorzeichen, die eine Genauigkeit von bis zu 48 Bit unterstützt.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readIntLE(0, 6).toString(16));
// Prints: -546f87a9cbee
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readIntLE(0, 6).toString(16));
// Prints: -546f87a9cbee

buf.readUInt8([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 1. Standard: 0.
  • Gibt zurück: <integer>

Liest eine Ganzzahl ohne Vorzeichen von 8 Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readUint8 verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([1, -2]);

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

const buf = Buffer.from([1, -2]);

console.log(buf.readUInt8(0));
// Prints: 1
console.log(buf.readUInt8(1));
// Prints: 254
console.log(buf.readUInt8(2));
// Throws ERR_OUT_OF_RANGE.

buf.readUInt16BE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 2. Standard: 0.
  • Gibt zurück: <integer>

Liest eine Ganzzahl ohne Vorzeichen, Big-Endian 16-Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readUint16BE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56]);

console.log(buf.readUInt16BE(0).toString(16));
// Prints: 1234
console.log(buf.readUInt16BE(1).toString(16));
// Prints: 3456
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56]);

console.log(buf.readUInt16BE(0).toString(16));
// Prints: 1234
console.log(buf.readUInt16BE(1).toString(16));
// Prints: 3456

buf.readUInt16LE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 2. Standard: 0.
  • Gibt zurück: <integer>

Liest eine Ganzzahl ohne Vorzeichen, Little-Endian 16-Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readUint16LE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56]);

console.log(buf.readUInt16LE(0).toString(16));
// Prints: 3412
console.log(buf.readUInt16LE(1).toString(16));
// Prints: 5634
console.log(buf.readUInt16LE(2).toString(16));
// Throws ERR_OUT_OF_RANGE.
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56]);

console.log(buf.readUInt16LE(0).toString(16));
// Prints: 3412
console.log(buf.readUInt16LE(1).toString(16));
// Prints: 5634
console.log(buf.readUInt16LE(2).toString(16));
// Throws ERR_OUT_OF_RANGE.

buf.readUInt32BE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 4. Standard: 0.
  • Gibt zurück: <integer>

Liest eine Ganzzahl ohne Vorzeichen, Big-Endian 32-Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readUint32BE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);

console.log(buf.readUInt32BE(0).toString(16));
// Prints: 12345678
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);

console.log(buf.readUInt32BE(0).toString(16));
// Prints: 12345678

buf.readUInt32LE([offset])#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 4. Standard: 0.
  • Gibt zurück: <integer>

Liest eine Ganzzahl ohne Vorzeichen, Little-Endian 32-Bit aus buf an der angegebenen offset.

Diese Funktion ist auch unter dem Alias readUint32LE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);

console.log(buf.readUInt32LE(0).toString(16));
// Prints: 78563412
console.log(buf.readUInt32LE(1).toString(16));
// Throws ERR_OUT_OF_RANGE.
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);

console.log(buf.readUInt32LE(0).toString(16));
// Prints: 78563412
console.log(buf.readUInt32LE(1).toString(16));
// Throws ERR_OUT_OF_RANGE.

buf.readUIntBE(offset, byteLength)#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - byteLength.
  • byteLength <integer> Anzahl der zu lesenden Bytes. Muss erfüllen: 0 < byteLength <= 6.
  • Gibt zurück: <integer>

Liest byteLength Bytes aus buf an der angegebenen offset und interpretiert das Ergebnis als eine Ganzzahl ohne Vorzeichen, Big-Endian, die eine Genauigkeit von bis zu 48 Bit unterstützt.

Diese Funktion ist auch unter dem Alias readUintBE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readUIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readUIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readUIntBE(0, 6).toString(16));
// Prints: 1234567890ab
console.log(buf.readUIntBE(1, 6).toString(16));
// Throws ERR_OUT_OF_RANGE.

buf.readUIntLE(offset, byteLength)#

  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Lesen begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - byteLength.
  • byteLength <integer> Anzahl der zu lesenden Bytes. Muss erfüllen: 0 < byteLength <= 6.
  • Gibt zurück: <integer>

Liest byteLength Bytes aus buf an der angegebenen offset und interpretiert das Ergebnis als eine Ganzzahl ohne Vorzeichen, Little-Endian, die eine Genauigkeit von bis zu 48 Bit unterstützt.

Diese Funktion ist auch unter dem Alias readUintLE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readUIntLE(0, 6).toString(16));
// Prints: ab9078563412
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);

console.log(buf.readUIntLE(0, 6).toString(16));
// Prints: ab9078563412

buf.subarray([start[, end]])#

Gibt einen neuen Buffer zurück, der auf denselben Speicher verweist wie das Original, aber durch die start- und end-Indizes versetzt und zugeschnitten ist.

Die Angabe eines end, das größer als buf.length ist, führt zum gleichen Ergebnis wie end gleich buf.length.

Diese Methode wird von TypedArray.prototype.subarray() geerbt.

Das Ändern des neuen Buffer-Slices ändert den Speicher im ursprünglichen Buffer, da sich der zugewiesene Speicher der beiden Objekte überschneidet.

import { Buffer } from 'node:buffer';

// Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
// from the original `Buffer`.

const buf1 = Buffer.allocUnsafe(26);

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf1[i] = i + 97;
}

const buf2 = buf1.subarray(0, 3);

console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: abc

buf1[0] = 33;

console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: !bc
const { Buffer } = require('node:buffer');

// Create a `Buffer` with the ASCII alphabet, take a slice, and modify one byte
// from the original `Buffer`.

const buf1 = Buffer.allocUnsafe(26);

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf1[i] = i + 97;
}

const buf2 = buf1.subarray(0, 3);

console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: abc

buf1[0] = 33;

console.log(buf2.toString('ascii', 0, buf2.length));
// Prints: !bc

Die Angabe negativer Indizes bewirkt, dass das Slice relativ zum Ende von buf anstatt zum Anfang generiert wird.

import { Buffer } from 'node:buffer';

const buf = Buffer.from('buffer');

console.log(buf.subarray(-6, -1).toString());
// Prints: buffe
// (Equivalent to buf.subarray(0, 5).)

console.log(buf.subarray(-6, -2).toString());
// Prints: buff
// (Equivalent to buf.subarray(0, 4).)

console.log(buf.subarray(-5, -2).toString());
// Prints: uff
// (Equivalent to buf.subarray(1, 4).)
const { Buffer } = require('node:buffer');

const buf = Buffer.from('buffer');

console.log(buf.subarray(-6, -1).toString());
// Prints: buffe
// (Equivalent to buf.subarray(0, 5).)

console.log(buf.subarray(-6, -2).toString());
// Prints: buff
// (Equivalent to buf.subarray(0, 4).)

console.log(buf.subarray(-5, -2).toString());
// Prints: uff
// (Equivalent to buf.subarray(1, 4).)

buf.slice([start[, end]])#

Stabilität: 0 - Veraltet: Verwenden Sie stattdessen buf.subarray.

Gibt einen neuen Buffer zurück, der auf denselben Speicher verweist wie das Original, aber durch die start- und end-Indizes versetzt und zugeschnitten ist.

Diese Methode ist nicht kompatibel mit Uint8Array.prototype.slice(), was eine Oberklasse von Buffer ist. Um das Slice zu kopieren, verwenden Sie Uint8Array.prototype.slice().

import { Buffer } from 'node:buffer';

const buf = Buffer.from('buffer');

const copiedBuf = Uint8Array.prototype.slice.call(buf);
copiedBuf[0]++;
console.log(copiedBuf.toString());
// Prints: cuffer

console.log(buf.toString());
// Prints: buffer

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

const buf = Buffer.from('buffer');

const copiedBuf = Uint8Array.prototype.slice.call(buf);
copiedBuf[0]++;
console.log(copiedBuf.toString());
// Prints: cuffer

console.log(buf.toString());
// Prints: buffer

// With buf.slice(), the original buffer is modified.
const notReallyCopiedBuf = buf.slice();
notReallyCopiedBuf[0]++;
console.log(notReallyCopiedBuf.toString());
// Prints: cuffer
console.log(buf.toString());
// Also prints: cuffer (!)

buf.swap16()#

  • Gibt zurück: <Buffer> Eine Referenz auf buf.

Interpretiert buf als ein Array von 16-Bit Ganzzahlen ohne Vorzeichen und tauscht die Byte-Reihenfolge in-place. Wirft ERR_INVALID_BUFFER_SIZE, wenn buf.length kein Vielfaches von 2 ist.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf1.swap16();

console.log(buf1);
// Prints: <Buffer 02 01 04 03 06 05 08 07>

const buf2 = Buffer.from([0x1, 0x2, 0x3]);

buf2.swap16();
// Throws ERR_INVALID_BUFFER_SIZE.
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf1.swap16();

console.log(buf1);
// Prints: <Buffer 02 01 04 03 06 05 08 07>

const buf2 = Buffer.from([0x1, 0x2, 0x3]);

buf2.swap16();
// Throws ERR_INVALID_BUFFER_SIZE.

Eine bequeme Verwendung von buf.swap16() ist die schnelle In-Place-Konvertierung zwischen UTF-16 Little-Endian und UTF-16 Big-Endian

import { Buffer } from 'node:buffer';

const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
buf.swap16(); // Convert to big-endian UTF-16 text.
const { Buffer } = require('node:buffer');

const buf = Buffer.from('This is little-endian UTF-16', 'utf16le');
buf.swap16(); // Convert to big-endian UTF-16 text.

buf.swap32()#

  • Gibt zurück: <Buffer> Eine Referenz auf buf.

Interpretiert buf als ein Array von 32-Bit Ganzzahlen ohne Vorzeichen und tauscht die Byte-Reihenfolge in-place. Wirft ERR_INVALID_BUFFER_SIZE, wenn buf.length kein Vielfaches von 4 ist.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf1.swap32();

console.log(buf1);
// Prints: <Buffer 04 03 02 01 08 07 06 05>

const buf2 = Buffer.from([0x1, 0x2, 0x3]);

buf2.swap32();
// Throws ERR_INVALID_BUFFER_SIZE.
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf1.swap32();

console.log(buf1);
// Prints: <Buffer 04 03 02 01 08 07 06 05>

const buf2 = Buffer.from([0x1, 0x2, 0x3]);

buf2.swap32();
// Throws ERR_INVALID_BUFFER_SIZE.

buf.swap64()#

  • Gibt zurück: <Buffer> Eine Referenz auf buf.

Interpretiert buf als ein Array von 64-Bit-Zahlen und tauscht die Byte-Reihenfolge in-place. Wirft ERR_INVALID_BUFFER_SIZE, wenn buf.length kein Vielfaches von 8 ist.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf1.swap64();

console.log(buf1);
// Prints: <Buffer 08 07 06 05 04 03 02 01>

const buf2 = Buffer.from([0x1, 0x2, 0x3]);

buf2.swap64();
// Throws ERR_INVALID_BUFFER_SIZE.
const { Buffer } = require('node:buffer');

const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]);

console.log(buf1);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf1.swap64();

console.log(buf1);
// Prints: <Buffer 08 07 06 05 04 03 02 01>

const buf2 = Buffer.from([0x1, 0x2, 0x3]);

buf2.swap64();
// Throws ERR_INVALID_BUFFER_SIZE.

buf.toJSON()#

Gibt eine JSON-Repräsentation von buf zurück. JSON.stringify() ruft diese Funktion implizit auf, wenn eine Buffer-Instanz stringifiziert wird.

Buffer.from() akzeptiert Objekte in dem Format, das von dieser Methode zurückgegeben wird. Insbesondere funktioniert Buffer.from(buf.toJSON()) wie Buffer.from(buf).

import { Buffer } from 'node:buffer';

const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);

console.log(json);
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}

const copy = JSON.parse(json, (key, value) => {
  return value && value.type === 'Buffer' ?
    Buffer.from(value) :
    value;
});

console.log(copy);
// Prints: <Buffer 01 02 03 04 05>
const { Buffer } = require('node:buffer');

const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
const json = JSON.stringify(buf);

console.log(json);
// Prints: {"type":"Buffer","data":[1,2,3,4,5]}

const copy = JSON.parse(json, (key, value) => {
  return value && value.type === 'Buffer' ?
    Buffer.from(value) :
    value;
});

console.log(copy);
// Prints: <Buffer 01 02 03 04 05>

buf.toString([encoding[, start[, end]]])#

  • encoding <string> Die zu verwendende Zeichenkodierung. Standard: 'utf8'.
  • start <integer> Der Byte-Offset, an dem mit dem Dekodieren begonnen werden soll. Standard: 0.
  • end <integer> Der Byte-Offset, an dem das Dekodieren beendet werden soll (nicht inklusive). Standard: buf.length.
  • Rückgabe: <string>

Dekodiert buf in einen String gemäß der angegebenen Zeichenkodierung in encoding. start und end können übergeben werden, um nur einen Teil von buf zu dekodieren.

Wenn encoding 'utf8' ist und eine Byte-Sequenz in der Eingabe kein gültiges UTF-8 ist, wird jedes ungültige Byte durch das Ersatzzeichen U+FFFD ersetzt.

Die maximale Länge einer String-Instanz (in UTF-16-Code-Einheiten) ist als buffer.constants.MAX_STRING_LENGTH verfügbar.

import { Buffer } from 'node:buffer';

const buf1 = Buffer.allocUnsafe(26);

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf1[i] = i + 97;
}

console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde

const buf2 = Buffer.from('tést');

console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: té
const { Buffer } = require('node:buffer');

const buf1 = Buffer.allocUnsafe(26);

for (let i = 0; i < 26; i++) {
  // 97 is the decimal ASCII value for 'a'.
  buf1[i] = i + 97;
}

console.log(buf1.toString('utf8'));
// Prints: abcdefghijklmnopqrstuvwxyz
console.log(buf1.toString('utf8', 0, 5));
// Prints: abcde

const buf2 = Buffer.from('tést');

console.log(buf2.toString('hex'));
// Prints: 74c3a97374
console.log(buf2.toString('utf8', 0, 3));
// Prints: té
console.log(buf2.toString(undefined, 0, 3));
// Prints: té

buf.values()#

Erstellt und gibt einen Iterator für buf-Werte (Bytes) zurück. Diese Funktion wird automatisch aufgerufen, wenn ein Buffer in einer for..of-Anweisung verwendet wird.

import { Buffer } from 'node:buffer';

const buf = Buffer.from('buffer');

for (const value of buf.values()) {
  console.log(value);
}
// Prints:
//   98
//   117
//   102
//   102
//   101
//   114

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

const buf = Buffer.from('buffer');

for (const value of buf.values()) {
  console.log(value);
}
// Prints:
//   98
//   117
//   102
//   102
//   101
//   114

for (const value of buf) {
  console.log(value);
}
// Prints:
//   98
//   117
//   102
//   102
//   101
//   114

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

  • string <string> String, der in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Schreiben des string begonnen wird. Standard: 0.
  • length <integer> Maximale Anzahl der zu schreibenden Bytes (geschriebene Bytes werden buf.length - offset nicht überschreiten). Standard: buf.length - offset.
  • encoding <string> Die Zeichenkodierung von string. Standard: 'utf8'.
  • Gibt zurück: <integer> Anzahl der geschriebenen Bytes.

Schreibt string in buf an der offset gemäß der Zeichenkodierung in encoding. Der length-Parameter ist die Anzahl der Bytes, die geschrieben werden sollen. Wenn buf nicht genug Platz enthielt, um den gesamten String aufzunehmen, wird nur ein Teil des string geschrieben. Teilweise kodierte Zeichen werden jedoch nicht geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.alloc(256);

const len = buf.write('\u00bd + \u00bc = \u00be', 0);

console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
// Prints: 12 bytes: ½ + ¼ = ¾

const buffer = Buffer.alloc(10);

const length = buffer.write('abcd', 8);

console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
// Prints: 2 bytes : ab
const { Buffer } = require('node:buffer');

const buf = Buffer.alloc(256);

const len = buf.write('\u00bd + \u00bc = \u00be', 0);

console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
// Prints: 12 bytes: ½ + ¼ = ¾

const buffer = Buffer.alloc(10);

const length = buffer.write('abcd', 8);

console.log(`${length} bytes: ${buffer.toString('utf8', 8, 10)}`);
// Prints: 2 bytes : ab

buf.writeBigInt64BE(value[, offset])#

  • value <bigint> Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Schreiben begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(8);

buf.writeBigInt64BE(0x0102030405060708n, 0);

console.log(buf);
// Prints: <Buffer 01 02 03 04 05 06 07 08>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(8);

buf.writeBigInt64BE(0x0102030405060708n, 0);

console.log(buf);
// Prints: <Buffer 01 02 03 04 05 06 07 08>

buf.writeBigInt64LE(value[, offset])#

  • value <bigint> Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Schreiben begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(8);

buf.writeBigInt64LE(0x0102030405060708n, 0);

console.log(buf);
// Prints: <Buffer 08 07 06 05 04 03 02 01>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(8);

buf.writeBigInt64LE(0x0102030405060708n, 0);

console.log(buf);
// Prints: <Buffer 08 07 06 05 04 03 02 01>

buf.writeBigUInt64BE(value[, offset])#

  • value <bigint> Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Schreiben begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf.

Diese Funktion ist auch unter dem Alias writeBigUint64BE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(8);

buf.writeBigUInt64BE(0xdecafafecacefaden, 0);

console.log(buf);
// Prints: <Buffer de ca fa fe ca ce fa de>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(8);

buf.writeBigUInt64BE(0xdecafafecacefaden, 0);

console.log(buf);
// Prints: <Buffer de ca fa fe ca ce fa de>

buf.writeBigUInt64LE(value[, offset])#

  • value <bigint> Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die übersprungen werden sollen, bevor mit dem Schreiben begonnen wird. Muss erfüllen: 0 <= offset <= buf.length - 8. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(8);

buf.writeBigUInt64LE(0xdecafafecacefaden, 0);

console.log(buf);
// Prints: <Buffer de fa ce ca fe fa ca de>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(8);

buf.writeBigUInt64LE(0xdecafafecacefaden, 0);

console.log(buf);
// Prints: <Buffer de fa ce ca fe fa ca de>

Diese Funktion ist auch unter dem Alias writeBigUint64LE verfügbar.

buf.writeDoubleBE(value[, offset])#

  • value <number> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 8 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf. value muss eine JavaScript-Zahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine JavaScript-Zahl ist.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(8);

buf.writeDoubleBE(123.456, 0);

console.log(buf);
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(8);

buf.writeDoubleBE(123.456, 0);

console.log(buf);
// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>

buf.writeDoubleLE(value[, offset])#

  • value <number> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 8 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf. value muss eine JavaScript-Zahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine JavaScript-Zahl ist.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(8);

buf.writeDoubleLE(123.456, 0);

console.log(buf);
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(8);

buf.writeDoubleLE(123.456, 0);

console.log(buf);
// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>

buf.writeFloatBE(value[, offset])#

  • value <number> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 4 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf. Das Verhalten ist undefiniert, wenn value etwas anderes als eine JavaScript-Zahl ist.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeFloatBE(0xcafebabe, 0);

console.log(buf);
// Prints: <Buffer 4f 4a fe bb>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeFloatBE(0xcafebabe, 0);

console.log(buf);
// Prints: <Buffer 4f 4a fe bb>

buf.writeFloatLE(value[, offset])#

  • value <number> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 4 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf. Das Verhalten ist undefiniert, wenn value etwas anderes als eine JavaScript-Zahl ist.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeFloatLE(0xcafebabe, 0);

console.log(buf);
// Prints: <Buffer bb fe 4a 4f>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeFloatLE(0xcafebabe, 0);

console.log(buf);
// Prints: <Buffer bb fe 4a 4f>

buf.writeInt8(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 1 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value an die angegebene offset-Position in buf. value muss eine gültige vorzeichenbehaftete 8-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete 8-Bit-Ganzzahl ist.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(2);

buf.writeInt8(2, 0);
buf.writeInt8(-2, 1);

console.log(buf);
// Prints: <Buffer 02 fe>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(2);

buf.writeInt8(2, 0);
buf.writeInt8(-2, 1);

console.log(buf);
// Prints: <Buffer 02 fe>

buf.writeInt16BE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 2 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenbehaftete 16-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete 16-Bit-Ganzzahl ist.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(2);

buf.writeInt16BE(0x0102, 0);

console.log(buf);
// Prints: <Buffer 01 02>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(2);

buf.writeInt16BE(0x0102, 0);

console.log(buf);
// Prints: <Buffer 01 02>

buf.writeInt16LE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 2 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenbehaftete 16-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete 16-Bit-Ganzzahl ist.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(2);

buf.writeInt16LE(0x0304, 0);

console.log(buf);
// Prints: <Buffer 04 03>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(2);

buf.writeInt16LE(0x0304, 0);

console.log(buf);
// Prints: <Buffer 04 03>

buf.writeInt32BE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 4 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenbehaftete 32-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete 32-Bit-Ganzzahl ist.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeInt32BE(0x01020304, 0);

console.log(buf);
// Prints: <Buffer 01 02 03 04>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeInt32BE(0x01020304, 0);

console.log(buf);
// Prints: <Buffer 01 02 03 04>

buf.writeInt32LE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 4 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenbehaftete 32-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete 32-Bit-Ganzzahl ist.

value wird als vorzeichenbehaftete Ganzzahl im Zweierkomplement interpretiert und geschrieben.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeInt32LE(0x05060708, 0);

console.log(buf);
// Prints: <Buffer 08 07 06 05>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeInt32LE(0x05060708, 0);

console.log(buf);
// Prints: <Buffer 08 07 06 05>

buf.writeIntBE(value, offset, byteLength)#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - byteLength erfüllen.
  • byteLength <integer> Anzahl der zu schreibenden Bytes. Muss 0 < byteLength <= 6 erfüllen.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt byteLength Bytes von value als Big-Endian an der angegebenen offset-Position in buf. Unterstützt eine Genauigkeit von bis zu 48 Bit. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete Ganzzahl ist.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(6);

buf.writeIntBE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(6);

buf.writeIntBE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>

buf.writeIntLE(value, offset, byteLength)#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - byteLength erfüllen.
  • byteLength <integer> Anzahl der zu schreibenden Bytes. Muss 0 < byteLength <= 6 erfüllen.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt byteLength Bytes von value als Little-Endian an der angegebenen offset-Position in buf. Unterstützt eine Genauigkeit von bis zu 48 Bit. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenbehaftete Ganzzahl ist.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(6);

buf.writeIntLE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(6);

buf.writeIntLE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>

buf.writeUInt8(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 1 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value an die angegebene offset-Position in buf. value muss eine gültige vorzeichenlose 8-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose 8-Bit-Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUint8 verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);

console.log(buf);
// Prints: <Buffer 03 04 23 42>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeUInt8(0x3, 0);
buf.writeUInt8(0x4, 1);
buf.writeUInt8(0x23, 2);
buf.writeUInt8(0x42, 3);

console.log(buf);
// Prints: <Buffer 03 04 23 42>

buf.writeUInt16BE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 2 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenlose 16-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose 16-Bit-Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUint16BE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);

console.log(buf);
// Prints: <Buffer de ad be ef>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeUInt16BE(0xdead, 0);
buf.writeUInt16BE(0xbeef, 2);

console.log(buf);
// Prints: <Buffer de ad be ef>

buf.writeUInt16LE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 2 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenlose 16-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose 16-Bit-Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUint16LE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);

console.log(buf);
// Prints: <Buffer ad de ef be>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeUInt16LE(0xdead, 0);
buf.writeUInt16LE(0xbeef, 2);

console.log(buf);
// Prints: <Buffer ad de ef be>

buf.writeUInt32BE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 4 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Big-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenlose 32-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose 32-Bit-Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUint32BE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeUInt32BE(0xfeedface, 0);

console.log(buf);
// Prints: <Buffer fe ed fa ce>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeUInt32BE(0xfeedface, 0);

console.log(buf);
// Prints: <Buffer fe ed fa ce>

buf.writeUInt32LE(value[, offset])#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - 4 erfüllen. Standard: 0.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt value als Little-Endian an der angegebenen offset-Position in buf. value muss eine gültige vorzeichenlose 32-Bit-Ganzzahl sein. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose 32-Bit-Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUint32LE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(4);

buf.writeUInt32LE(0xfeedface, 0);

console.log(buf);
// Prints: <Buffer ce fa ed fe>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(4);

buf.writeUInt32LE(0xfeedface, 0);

console.log(buf);
// Prints: <Buffer ce fa ed fe>

buf.writeUIntBE(value, offset, byteLength)#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - byteLength erfüllen.
  • byteLength <integer> Anzahl der zu schreibenden Bytes. Muss 0 < byteLength <= 6 erfüllen.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt byteLength Bytes von value als Big-Endian an der angegebenen offset-Position in buf. Unterstützt eine Genauigkeit von bis zu 48 Bit. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUintBE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(6);

buf.writeUIntBE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(6);

buf.writeUIntBE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer 12 34 56 78 90 ab>

buf.writeUIntLE(value, offset, byteLength)#

  • value <integer> Die Zahl, die in buf geschrieben werden soll.
  • offset <integer> Anzahl der Bytes, die vor dem Schreiben übersprungen werden sollen. Muss 0 <= offset <= buf.length - byteLength erfüllen.
  • byteLength <integer> Anzahl der zu schreibenden Bytes. Muss 0 < byteLength <= 6 erfüllen.
  • Gibt zurück: <integer> offset plus die Anzahl der geschriebenen Bytes.

Schreibt byteLength Bytes von value als Little-Endian an der angegebenen offset-Position in buf. Unterstützt eine Genauigkeit von bis zu 48 Bit. Das Verhalten ist undefiniert, wenn value etwas anderes als eine vorzeichenlose Ganzzahl ist.

Diese Funktion ist auch unter dem Alias writeUintLE verfügbar.

import { Buffer } from 'node:buffer';

const buf = Buffer.allocUnsafe(6);

buf.writeUIntLE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>
const { Buffer } = require('node:buffer');

const buf = Buffer.allocUnsafe(6);

buf.writeUIntLE(0x1234567890ab, 0, 6);

console.log(buf);
// Prints: <Buffer ab 90 78 56 34 12>

new Buffer(array)#

Stabilität: 0 – Veraltet: Verwenden Sie stattdessen Buffer.from(array).

  • array <integer[]> Ein Array von Bytes, die kopiert werden sollen.

Siehe Buffer.from(array).

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

Stabilität: 0 – Veraltet: Verwenden Sie stattdessen Buffer.from(arrayBuffer[, byteOffset[, length]]).

Siehe Buffer.from(arrayBuffer[, byteOffset[, length]]).

new Buffer(buffer)#

Stabilität: 0 – Veraltet: Verwenden Sie stattdessen Buffer.from(buffer).

Siehe Buffer.from(buffer).

new Buffer(size)#

Stabilität: 0 – Veraltet: Verwenden Sie stattdessen Buffer.alloc() (siehe auch Buffer.allocUnsafe()).

  • size <integer> Die gewünschte Länge des neuen Buffer.

Siehe Buffer.alloc() und Buffer.allocUnsafe(). Diese Variante des Konstruktors ist äquivalent zu Buffer.alloc().

new Buffer(string[, encoding])#

Stabilität: 0 – Veraltet: Verwenden Sie stattdessen Buffer.from(string[, encoding]).

  • string <string> Zu kodierender String.
  • encoding <string> Die Kodierung von string. Standard: 'utf8'.

Siehe Buffer.from(string[, encoding]).

Klasse: File#

Ein <File> stellt Informationen über Dateien bereit.

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

file.name#

Der Name der File.

file.lastModified#

Das Datum der letzten Änderung der File.

node:buffer Modul-APIs#

Obwohl das Buffer-Objekt global verfügbar ist, gibt es zusätzliche Buffer-bezogene APIs, die nur über das node:buffer-Modul via require('node:buffer') zugänglich sind.

buffer.atob(data)#

Stabilität: 3 - Legacy. Verwenden Sie stattdessen Buffer.from(data, 'base64').

  • data <any> Der Base64-kodierte Eingabestring.

Dekodiert einen String aus Base64-kodierten Daten in Bytes und kodiert diese Bytes in einen String unter Verwendung von Latin-1 (ISO-8859-1).

data kann jeder JavaScript-Wert sein, der in einen String konvertiert werden kann.

Diese Funktion wird nur aus Gründen der Kompatibilität mit alten Webplattform-APIs bereitgestellt und sollte niemals in neuem Code verwendet werden, da sie Strings zur Darstellung binärer Daten verwendet und vor der Einführung typisierter Arrays in JavaScript liegt. Für Code, der Node.js-APIs verwendet, sollte die Konvertierung zwischen base64-kodierten Strings und Binärdaten mit Buffer.from(str, 'base64') und buf.toString('base64') durchgeführt werden.

Eine automatisierte Migration ist verfügbar (Quelle)

npx codemod@latest @nodejs/buffer-atob-btoa

buffer.btoa(data)#

Stabilität: 3 - Legacy. Verwenden Sie stattdessen buf.toString('base64').

  • data <any> Ein ASCII (Latin1) String.

Dekodiert einen String in Bytes unter Verwendung von Latin-1 (ISO-8859) und kodiert diese Bytes in einen String unter Verwendung von Base64.

data kann jeder JavaScript-Wert sein, der in einen String konvertiert werden kann.

Diese Funktion wird nur aus Gründen der Kompatibilität mit alten Webplattform-APIs bereitgestellt und sollte niemals in neuem Code verwendet werden, da sie Strings zur Darstellung binärer Daten verwendet und vor der Einführung typisierter Arrays in JavaScript liegt. Für Code, der Node.js-APIs verwendet, sollte die Konvertierung zwischen base64-kodierten Strings und Binärdaten mit Buffer.from(str, 'base64') und buf.toString('base64') durchgeführt werden.

Eine automatisierte Migration ist verfügbar (Quelle)

npx codemod@latest @nodejs/buffer-atob-btoa

buffer.isAscii(input)#

Diese Funktion gibt true zurück, wenn input nur gültige ASCII-kodierte Daten enthält, einschließlich des Falls, dass input leer ist.

Wirft einen Fehler, wenn input ein gelöster (detached) ArrayBuffer ist.

buffer.isUtf8(input)#

Diese Funktion gibt true zurück, wenn input nur gültige UTF-8-kodierte Daten enthält, einschließlich des Falls, dass input leer ist.

Wirft einen Fehler, wenn input ein gelöster (detached) ArrayBuffer ist.

buffer.INSPECT_MAX_BYTES#

Gibt die maximale Anzahl von Bytes zurück, die beim Aufruf von buf.inspect() zurückgegeben werden. Dies kann von Benutzermodulen überschrieben werden. Weitere Details zum Verhalten von buf.inspect() finden Sie unter util.inspect().

buffer.kMaxLength#

  • Typ: <integer> Die maximal zulässige Größe für eine einzelne Buffer-Instanz.

Ein Alias für buffer.constants.MAX_LENGTH.

buffer.kStringMaxLength#

  • Typ: <integer> Die maximal zulässige Länge für eine einzelne string-Instanz.

Ein Alias für buffer.constants.MAX_STRING_LENGTH.

buffer.resolveObjectURL(id)#

  • id <string> Ein 'blob:nodedata:... URL-String, der von einem früheren Aufruf von URL.createObjectURL() zurückgegeben wurde.
  • Gibt zurück: <Blob>

Löst eine 'blob:nodedata:...'-URL in ein zugehöriges <Blob>-Objekt auf, das durch einen vorherigen Aufruf von URL.createObjectURL() registriert wurde.

buffer.transcode(source, fromEnc, toEnc)#

Rekodiert die angegebene Buffer- oder Uint8Array-Instanz von einer Zeichenkodierung in eine andere. Gibt eine neue Buffer-Instanz zurück.

Wirft einen Fehler, wenn fromEnc oder toEnc ungültige Zeichenkodierungen angeben oder wenn die Konvertierung von fromEnc nach toEnc nicht erlaubt ist.

Von buffer.transcode() unterstützte Kodierungen sind: 'ascii', 'utf8', 'utf16le', 'ucs2', 'latin1' und 'binary'.

Der Transkodierungsprozess verwendet Ersetzungszeichen, wenn eine gegebene Byte-Sequenz nicht adäquat in der Zielkodierung dargestellt werden kann. Zum Beispiel:

import { Buffer, transcode } from 'node:buffer';

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

const newBuf = transcode(Buffer.from('€'), 'utf8', 'ascii');
console.log(newBuf.toString('ascii'));
// Prints: '?'

Da das Euro-Zeichen () in US-ASCII nicht darstellbar ist, wird es im transkodierten Buffer durch ? ersetzt.

Buffer-Konstanten#

buffer.constants.MAX_LENGTH#
  • Typ: <integer> Die maximal zulässige Größe für eine einzelne Buffer-Instanz.

Auf 32-Bit-Architekturen entspricht dieser Wert 231 - 1 (etwa 2 GiB).

Auf 64-Bit-Architekturen entspricht dieser Wert Number.MAX_SAFE_INTEGER (253 - 1, etwa 8 PiB).

Er spiegelt im Hintergrund v8::Uint8Array::kMaxLength wider.

Dieser Wert ist auch als buffer.kMaxLength verfügbar.

buffer.constants.MAX_STRING_LENGTH#
  • Typ: <integer> Die maximal zulässige Länge für eine einzelne string-Instanz.

Repräsentiert die größte length, die ein string-Primitiv haben kann, gezählt in UTF-16-Codeeinheiten.

Dieser Wert kann von der verwendeten JS-Engine abhängen.

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

In Node.js-Versionen vor 6.0.0 wurden Buffer-Instanzen mithilfe der Buffer-Konstruktorfunktion erstellt, die den zurückgegebenen Buffer je nach übergebenen Argumenten unterschiedlich zuweist.

  • Die Übergabe einer Zahl als erstes Argument an Buffer() (z. B. new Buffer(10)) weist ein neues Buffer-Objekt der angegebenen Größe zu. Vor Node.js 8.0.0 ist der für solche Buffer-Instanzen zugewiesene Speicher nicht initialisiert und kann sensible Daten enthalten. Solche Buffer-Instanzen müssen anschließend entweder durch Verwendung von buf.fill(0) oder durch Schreiben in den gesamten Buffer initialisiert werden, bevor Daten aus dem Buffer gelesen werden. Obwohl dieses Verhalten beabsichtigt ist, um die Leistung zu verbessern, hat die Entwicklungserfahrung gezeigt, dass eine explizitere Unterscheidung zwischen der Erstellung eines schnellen, aber uninitialisierten Buffer und der Erstellung eines langsameren, aber sichereren Buffer erforderlich ist. Seit Node.js 8.0.0 geben Buffer(num) und new Buffer(num) einen Buffer mit initialisiertem Speicher zurück.
  • Die Übergabe eines Strings, Arrays oder Buffer als erstes Argument kopiert die Daten des übergebenen Objekts in den Buffer.
  • Die Übergabe eines <ArrayBuffer> oder <SharedArrayBuffer> gibt einen Buffer zurück, der sich den zugewiesenen Speicher mit dem angegebenen Array-Buffer teilt.

Da das Verhalten von new Buffer() je nach Typ des ersten Arguments unterschiedlich ist, können bei fehlender Argumentvalidierung oder fehlender Buffer-Initialisierung versehentlich Sicherheits- und Zuverlässigkeitsprobleme in Anwendungen eingeführt werden.

Wenn beispielsweise ein Angreifer eine Anwendung dazu bringen kann, eine Zahl zu empfangen, wo ein String erwartet wird, ruft die Anwendung möglicherweise new Buffer(100) anstelle von new Buffer("100") auf, was dazu führt, dass ein 100-Byte-Puffer zugewiesen wird, anstatt eines 3-Byte-Puffers mit dem Inhalt "100". Dies ist häufig bei JSON-API-Aufrufen möglich. Da JSON zwischen numerischen und String-Typen unterscheidet, ermöglicht es die Injektion von Zahlen, wo eine naiv geschriebene Anwendung, die ihre Eingaben nicht ausreichend validiert, immer einen String erwartet. Vor Node.js 8.0.0 könnte der 100-Byte-Puffer beliebige, bereits im Speicher vorhandene Daten enthalten und könnte daher verwendet werden, um interne Speichergeheimnisse einem entfernten Angreifer preiszugeben. Seit Node.js 8.0.0 kann eine Offenlegung von Speicher nicht mehr auftreten, da die Daten mit Nullen gefüllt sind. Andere Angriffe sind jedoch weiterhin möglich, wie z. B. die Verursachung von sehr großen Pufferzuweisungen durch den Server, was zu einer Leistungsminderung oder einem Absturz aufgrund von Speichermangel führt.

Um die Erstellung von Buffer-Instanzen zuverlässiger und weniger fehleranfällig zu machen, wurden die verschiedenen Formen des new Buffer()-Konstruktors veraltet und durch separate Buffer.from()-, Buffer.alloc()- und Buffer.allocUnsafe()-Methoden ersetzt.

Entwickler sollten alle bestehenden Verwendungen der new Buffer()-Konstruktoren auf eine dieser neuen APIs migrieren.

Buffer-Instanzen, die von Buffer.allocUnsafe(), Buffer.from(string), Buffer.concat() und Buffer.from(array) zurückgegeben werden, können aus einem gemeinsamen internen Speicherpool zugewiesen werden, wenn size kleiner oder gleich der Hälfte von Buffer.poolSize ist. Instanzen, die von Buffer.allocUnsafeSlow() zurückgegeben werden, verwenden niemals den gemeinsamen internen Speicherpool.

Die Kommandozeilenoption --zero-fill-buffers#

Node.js kann mit der Kommandozeilenoption --zero-fill-buffers gestartet werden, um zu bewirken, dass alle neu zugewiesenen Buffer-Instanzen bei der Erstellung standardmäßig mit Nullen gefüllt werden. Ohne diese Option sind Puffer, die mit Buffer.allocUnsafe() und Buffer.allocUnsafeSlow() erstellt wurden, nicht mit Nullen gefüllt. Die Verwendung dieses Flags kann sich spürbar negativ auf die Leistung auswirken. Verwenden Sie die Option --zero-fill-buffers nur, wenn es notwendig ist, sicherzustellen, dass neu zugewiesene Buffer-Instanzen keine alten Daten enthalten, die möglicherweise sensibel sind.

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

Was macht Buffer.allocUnsafe() und Buffer.allocUnsafeSlow() "unsicher"?#

Beim Aufruf von Buffer.allocUnsafe() und Buffer.allocUnsafeSlow() ist das Segment des zugewiesenen Speichers nicht initialisiert (es wird nicht mit Nullen überschrieben). Obwohl dieses Design die Speicherzuweisung sehr schnell macht, könnte das zugewiesene Speichersegment alte Daten enthalten, die möglicherweise sensibel sind. Die Verwendung eines Buffer, der durch Buffer.allocUnsafe() erstellt wurde, ohne den Speicher vollständig zu überschreiben, kann dazu führen, dass diese alten Daten durchsickern, wenn der Buffer-Speicher gelesen wird.

Obwohl die Verwendung von Buffer.allocUnsafe() klare Leistungsvorteile bietet, ist besondere Vorsicht geboten, um die Einführung von Sicherheitslücken in eine Anwendung zu vermeiden.