Start · Sprachen · JavaScript · Referenz · Uint8Array.prototype.setFromBase64()

Uint8Array.prototype.setFromBase64()

Methode

Dekodiert einen Base64-String direkt in ein vorhandenes <code>Uint8Array</code> und gibt zurück, wie viele Zeichen gelesen und wie viele Bytes geschrieben wurden.

seit JavaScript ES2026 (Baseline 2025: Chrome 140, Firefox 133, Sa Kategorie: method-property

Signatur

Uint8Array.prototype.setFromBase64(string, options)

Beschreibung

setFromBase64() dekodiert einen Base64- oder Base64URL-kodierten String und schreibt die Bytes direkt in das bestehende Array. Es wird kein neuer Puffer angelegt. Die Methode gehört zu Uint8Array.fromBase64(), das immer ein neues Array erzeugt. setFromBase64() lohnt sich, wenn Sie Speicher wiederverwenden wollen, zum Beispiel für einen festen Puffer, einen Ringpuffer oder beim Schreiben an eine bestimmte Stelle über subarray().

Das Ergebnis ist ein Objekt { read, written }. read ist die Anzahl der verarbeiteten Zeichen des Eingabe-Strings, Leerzeichen eingeschlossen. written ist die Anzahl der geschriebenen Bytes. Wenn das Array zu klein ist, bricht die Methode ohne Fehler vor dem ersten 4-Zeichen-Block ab, dessen Bytes nicht mehr hineinpassen. Mit read können Sie danach an der richtigen Stelle im String weitermachen. Bytes hinter written bleiben unverändert.

Mit den Optionen legen Sie das Alphabet fest ("base64" oder das URL-sichere "base64url"). Außerdem bestimmen Sie, wie der letzte, eventuell unvollständige Block behandelt wird. Für das schrittweise Dekodieren von Datenströmen ist lastChunkHandling: "stop-before-partial" gedacht: Ein unvollständiger Rest wird dann nicht dekodiert und kann mit dem nächsten Teilstück zusammengefügt werden.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Base64-kodierte String. ASCII-Leerzeichen (Leerzeichen, Tab, Zeilenumbrüche) werden ignoriert. Ist der Wert kein String, wird ein TypeError ausgelöst.
$options object {} Optionales Einstellungsobjekt mit den folgenden Eigenschaften.
$options.alphabet "base64" | "base64url" "base64" Das Alphabet: "base64" nutzt + und /, "base64url" nutzt - und _.
$options.lastChunkHandling "loose" | "strict" | "stop-before-partial" "loose" Behandlung des letzten Blocks. "loose": Fehlendes Padding wird akzeptiert. "strict": Korrektes =-Padding ist Pflicht, und nicht verwendete Bits müssen 0 sein, sonst gibt es einen SyntaxError. "stop-before-partial": Ein unvollständiger Block am Ende wird nicht dekodiert; das ist für Datenströme gedacht.

Rückgabewert

Typ
{ read: number, written: number }
Beschreibung
Ein Objekt mit read (Anzahl der gelesenen Zeichen des Strings) und written (Anzahl der in das Array geschriebenen Bytes).

Beispiele

Base64 in einen vorhandenen Puffer dekodieren

const buffer = new Uint8Array(8);
const { read, written } = buffer.setFromBase64("SGVsbG8=");

console.log(read, written);
console.log(new TextDecoder().decode(buffer.subarray(0, written)));
8 5 Hello

An einem Offset schreiben mit subarray()

// Ein 4-Byte-Header ist schon vorhanden, die Nutzdaten kommen dahinter
const packet = new Uint8Array(10);
packet.set([0xCA, 0xFE, 0x00, 0x03]);

const result = packet.subarray(4).setFromBase64("AQID");
console.log(result);
console.log(packet);
{ read: 4, written: 3 } Uint8Array(10) [202, 254, 0, 3, 1, 2, 3, 0, 0, 0]

Zu kleines Ziel-Array und URL-sicheres Alphabet

// Nur 5 Bytes Platz: Der zweite 4er-Block (3 Bytes) passt nicht mehr
const small = new Uint8Array(5);
const res = small.setFromBase64("3q2-7w", { alphabet: "base64url" });
console.log(res, small);

// Mit genug Platz wird alles dekodiert
const full = new Uint8Array(4);
console.log(full.setFromBase64("3q2-7w", { alphabet: "base64url" }), full);
{ read: 4, written: 3 } Uint8Array(5) [222, 173, 190, 0, 0] { read: 6, written: 4 } Uint8Array(4) [222, 173, 190, 239]

Datenstrom schrittweise dekodieren mit stop-before-partial

const chunks = ["SGVsbG8s", "IFdlbHQ", "h"]; // "Hello, Welt!" in Teilstücken
const out = new Uint8Array(64);
let offset = 0;
let rest = "";

chunks.forEach((chunk, i) => {
  const isLast = i === chunks.length - 1;
  const input = rest + chunk;
  const { read, written } = out.subarray(offset).setFromBase64(input, {
    lastChunkHandling: isLast ? "loose" : "stop-before-partial",
  });
  offset += written;
  rest = input.slice(read); // nicht verarbeiteten Rest aufheben
});

console.log(new TextDecoder().decode(out.subarray(0, offset)));
Hello, Welt!