Перейти до вмісту

Потоки стиснення

Потокове стиснення gzip, deflate, Brotli і Zstandard.

На цій сторінці
Open in ChatGPTOpen in Claude

CompressionStream і DecompressionStream надають вхід для запису та вихід для читання.

ФорматТокен
Gzipgzip
Deflate з обгорткою zlibdeflate
Raw deflatedeflate-raw
Brotlibrotli
Zstandardzstd

Brotli і Zstandard — розширення Elide до стандартного набору форматів браузера. Формат зіставляється з урахуванням регістру; невідоме значення кидає 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);

Вхідні дані мають бути значеннями BufferSource. Пошкоджені або неповні стиснені дані спричиняють відхилення перетворення. Розпакування також застосовує обмеження безпеки хоста до надмірного виводу.

API з функціями зворотного виклику та на основі Buffer описано в розділі node:zlib.

Reference

Status: Full · Not measured · since 1.1.0

Exports

ExportKindStatusNotes
CompressionStreamclassFullreadable, writable
DecompressionStreamclassFullreadable, writable

Чи була ця сторінка корисною?