سؤال

ماذا او ما تيار الإدخال يجب استخدام النوع للتعامل مع تدفقات urlconnection التي تحتوي على HTTP ترميز المحتوى ضبط ل انحراف?

للحصول على ترميز المحتوى من GZIP أو ZIP ، أستخدم gzipinputstream ، لا توجد مشكلة.

للحصول على ترميز محتوى لـ "Deflate" لقد حاولت استخدامها InflaterInputStream و deflaterinputstream لكني أحصل

java.util.zip.zipexception: طريقة ضغط غير معروفة في java.util.zip.inflaterinputstream.read (inflaterinputstream.java:147)

ما أفهمه هو أن ترميز "انكماش" يشير إلى زلب الضغط ، ووفقا ل مستندات يجب التعامل مع هذا من قبل inflaterinputStream.

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

المحلول

في HTTP/1.1 ، Content-encoding: deflate يشير في الواقع إلى خوارزمية الضغط المنهارة ، على النحو المحدد بواسطة RFC 1951, ، ملفوفة بتنسيق بيانات ZLIB ، على النحو المحدد بواسطة RFC 1950.

ومع ذلك ، يقوم بعض البائعين بتنفيذ خوارزمية المنهارة على النحو المحدد RFC 1951 ، متجاهلين تمامًا RFC 1950 (لا رؤوس Zlib).

لقد أصيب آخرون بنفس القضية:

من أجل العمل حول هذا ، حاول إنشاء مثيل InflaterInputStream تمرير Inflater التي تم إنشاؤها مع nowrap المعلمة تعيين إلى true:

in = new InflaterInputStream(conn.getInputStream()), new Inflater(true));

نصائح أخرى

لسوء الحظ ، فإن استخدام InflaterInputStream مع كائن Inflater لم ينتج دائمًا الضغط الصحيح. اضطررت إلى اكتشاف الرؤوس وأخبر Inflater حيث كانت الإزاحة إلى الحمولة.

http://thushw.blogspot.com/2014/05/decoding-html-pages-with-content.html

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