Aller au contenu

Compression Streams

Compression gzip, deflate, Brotli et Zstandard en streaming.

Sur cette page

CompressionStream et DecompressionStream exposent une entrée accessible en écriture et une sortie accessible en lecture.

FormatJeton
Gzipgzip
Deflate encapsulé dans zlibdeflate
Deflate brutdeflate-raw
Brotlibrotli
Zstandardzstd

Brotli et Zstandard sont des extensions d’Elide à l’ensemble de formats standard des navigateurs. La correspondance des formats est sensible à la casse ; une valeur inconnue lève une TypeError.

async function collect(stream, input) {
  const writer = stream.writable.getWriter();
  const reader = stream.readable.getReader();
  const chunks = [];

  const reading = (async () => {
    while (true) {
      const { value, done } = await reader.read();
      if (done) break;
      chunks.push(value);
    }
  })();

  await writer.write(input);
  await writer.close();
  await reading;

  const size = chunks.reduce((total, chunk) => total + chunk.byteLength, 0);
  const output = new Uint8Array(size);
  let offset = 0;
  for (const chunk of chunks) {
    output.set(chunk, offset);
    offset += chunk.byteLength;
  }
  return output;
}

const input = new TextEncoder().encode("hello");
const compressed = await collect(new CompressionStream("gzip"), input);
const restored = await collect(new DecompressionStream("gzip"), compressed);

Les entrées doivent être des valeurs BufferSource. Des données compressées malformées ou incomplètes provoquent le rejet de la transformation. La décompression applique aussi des limites de sécurité de l’hôte en cas de sortie excessive.

Pour les API à callbacks et orientées Buffer, consultez node:zlib.

Reference

Status: Full · Not measured · since 1.1.0

Exports

ExportKindStatusNotes
CompressionStreamclassFullreadable, writable
DecompressionStreamclassFullreadable, writable

Cette page vous a-t-elle aidé ?