سؤال

أولاً ، دعنا نحدد بعض المصطلحات المشوشة عادة:

deflate = compression_algorithm;
zlib = header + deflate + trailer;
gzip = header + deflate + trailer;

أنا أبحث عن مكتبة ستسمح لي بالقيام بما يلي بشكل أساسي:

if(method == "gzip"){
    Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.GZIP);
}
else if(method == "deflate"){
    Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.DEFLATE);
}
else if(method == "zlib"){
    Response.Filter = new CompressionLibrary.OutputStream(Response.Filter, CompressionLibrary.Formats.ZLIB);
}

أبحث عن طريقة لاختبار تنسيقات الضغط 3 لاستخدامها على الويب. أود أن يكون ضغط الانضغاط على كل تنسيق هو نفس التنفيذ الدقيق. لقد اخترقت بالفعل في Zlib.net لإجباره على إعطائي انحرافًا خامًا على القيادة (عبر "ميزة غير موثقة") ... ومع ذلك ، فإن إضافة رأس GZIP ومقطورة لا يتجاوزون سوى دوري.

أي شخص يعرف مكتبة .NET التي تفعل هذا؟


توضيح:

http 1.1's انحراف ضغط صيغة هو في الواقع زلب تنسيق الضغط. Zlib غلاف حول المنهج. لديه رأس بايت ومقطورة 4 بايت ، دائماً (عندما تكون طرق ومستويات الضغط متطابقة).

Gzip يستخدم نفس تنسيق البيانات المضغوطة داخليًا مثل Zlib ... وهو انحراف (انحراف RAW ، وليس HTTP 1.1 DEFLATE [وهو ZLIB]). من الاختبار الأولي الخاص بي ، فإن بيانات Gzipped هي 11 من أصل 12 مرة من Zlib.

انحراف هي خوارزمية ضغط يتم استخدامها لضغط البيانات. عندما لا تكون هناك طرق غلاف (على سبيل المثال ، الرؤوس أو المقطورات) حول البيانات المنهارة ، فإنني أسميها "deflate" - ربما كان ينبغي علي أن أسميها "انحراف الخام" في حين أن.

أقوم بتحليل لطرق الضغط هذه ودعمها داخل متصفحات الويب وأحتاج إلى استخدام طريقة ضغط واحدة لجميع الأنواع الثلاثة.

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

المحلول

dotnetzip يفعل RFC 1950 (Zlib), RFC 1951 (انحراف), ، و RFC 1952 (GZIP). ويستخدم نفس محرك الضغط الأساسي لجميع الثلاثة.

dotnetzip أيضا zip الملفات.

نصائح أخرى

استنادًا إلى قراءتي لمستندات المعايير والعمل الذي قمت به مع ZLIB ، و .NET GZIP وتنفيذ التطبيقات ، والعديد من حزم الضغط الأخرى لـ .NET ، لقد حددت:

1) "انحراف الخام" أصغر دائمًا من ما تسميه "HTTP 1.1 deflate" ، وهو دائمًا أصغر من GZIP. على افتراض أنك استخدمت نفس المكتبة لتوليد الثلاثة. وهذا هو ، بالنسبة لأي مكتبة ضغط معينة ، يفرغ <zlib <gzip.

2) الاختلافات في الحجم صغيرة جدا. الفرق بين المنهج و Zlib عادة ما يكون مجرد بايت. الفرق بين Deflate و GZIP هو على الأكثر ، بضع عشرات بايت. هذا صحيح بغض النظر عن حجم الملف.

3) تنفيذ تطبيقات مختلفة لها نسب ضغط على نطاق واسع وأوقات التنفيذ. إن تطبيق ZLIB ، على سبيل المثال ، يعطي ضغطًا أفضل وتنفيذًا أسرع من تنفيذ .NET 3.5.

4) قابلية التشغيل البيني بين التطبيقات المختلفة هي ما يقرب من 100 ٪. وهذا يعني ، يمكن إلغاء ضغط ملف انحراف (أو GZIP) الذي تم إنشاؤه بواسطة مكتبة واحدة بواسطة أي مكتبة أخرى. لقد سمعت عن الحالات التي يكون فيها هذا صحيحًا ، لكنني لم أتمكن من بناء واحدة.

5) يستغرق الأمر وقتًا أطول بكثير لإنشاء GZIP مما يفعل Zlib ، بسبب حساب CRC.

لا أعرف مكتبة C# تسمح لك بإنشاء ملف ZLIB أو GZIP ، بالنظر إلى البيانات الخام ، ولكن يجب أن تكون قادرًا على بنائها بسهولة إلى حد ما إذا قمت بدراسة مستندات المعايير.

أنا أيضًا لا أعرف أي متصفح يدعم "deflate الخام". لكن بعد ذلك ، لا أستطيع أن أقول أنني جربته بالفعل. لقد استخدمت دائمًا "HTTP 1.1 Deflate".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top