انتقل إلى المحتوى

تدفقات الضغط

ضغط ⁦gzip⁩ و⁦deflate⁩ و⁦Brotli⁩ و⁦Zstandard⁩ المتدفق.

في هذه الصفحة
Open in ChatGPTOpen in Claude

يكشف ⁦CompressionStream⁩ و⁦DecompressionStream⁩ مدخلًا قابلًا للكتابة و مخرجًا قابلًا للقراءة.

الصيغةالرمز
‏⁦Gzip⁩gzip
‏⁦deflate⁩ مغلَّف بـ ⁦Zlib⁩deflate
‏⁦deflate⁩ خامdeflate-raw
‏⁦Brotli⁩brotli
‏⁦Zstandard⁩zstd

‏⁦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⁩. وتؤدي البيانات المضغوطة المشوّهة أو غير المكتملة إلى رفض التحويل. ويطبّق فك الضغط أيضًا حدود أمان المضيف على المخرجات المفرطة.

لواجهات دوال الاستدعاء والواجهات الموجّهة نحو ⁦Buffer⁩، راجع ⁦node:zlib⁩.

Reference

Status: Full · Not measured · since 1.1.0

Exports

ExportKindStatusNotes
CompressionStreamclassFullreadable, writable
DecompressionStreamclassFullreadable, writable

هل كانت هذه الصفحة مفيدة؟