افحص نهاية التدفق مع المخرج. [1] [2]
الخلاصة السريعة
خروج البيانات لا يثبت بلوغ نهاية التدفق المضغوط؛ افحص d.eof. [1] [2]
- نضغط ABBA بالإعدادات الافتراضية؛ نسمي الناتج c. [1] [2]
- قراءة c[:-1] تعيد b'ABBA'، لكن d.eof=False. [1] [2]
- تمرير c[-1:] للكائن نفسه يعيد b''؛ تصبح d.eof=True. [1] [2]
- zlib.decompress(c[:-1]) يرفع zlib.error في مثالنا. [1] [2]
- جربنا بايثون 3.12.14 مع zlib 1.3.2؛ تدفق zlib واحد، دون حد للمخرج أو استدعاء flush. [1] [2]
المثال
import zlib c=zlib.compress(b"ABBA") d=zlib.decompressobj() print(d.decompress(c[:-1]),d.eof) print(d.decompress(c[-1:]),d.eof)
الناتج: b'ABBA' False ثم b'' True. [1] [2]
التفسير
eof يبين بلوغ نهاية البيانات المضغوطة. بايتات ABBA خرجت قبل وصول آخر بايت من c؛ طول المخرج وحده لا يكفي. [1] [2]
المقارنة
الدالة المباشرة zlib.decompress(c[:-1]) ترفض التدفق المبتور. الكائن يسمح بتمرير الأجزاء؛ احتفظ بالمخرج السابق عند متابعة القراءة. [1] [2]

النطاق
في المثال المعلن، آخر بايت يكمل التدفق دون بيانات إضافية. لا نعمم المخرج نفسه على كل موضع قطع؛ صيغ أخرى خارج النطاق. [1] [2]
المراجع
- Python: zlib
- CPython 3.12.14: اختبارات zlib
- موضوع تك: لغة بايثون — مفردات
- موضوع تك: تطبيقات بايثون — مفردات
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
