تقنية

BZ2 في بايثون: هل يفك الكائن التدفقين معًا؟

الكائن يعيد bud ويحتفظ بالتدفق الثاني المضغوط
حد التدفق الأول. [1] [2]

افصل حدود التدفق المضغوط عن حدود المدخل. [1] [2]

الخلاصة السريعة

لا؛ الكائن يفك الأول فقط، والدالة تفك الاثنين. [1] [2]

  • ضغطنا bud وleaf منفصلين ثم جمعنا التدفقين. [1] [2]
  • الكائن يعيد bud؛ unused_data يساوي الثاني المضغوط. [1] [2]
  • bz2.decompress يعيد budleaf دون فاصل. [1] [2]
  • لفك الباقي بالكائن، أنشئ كائنًا جديدًا. [1] [2]
  • اختبرنا 3.12.14؛ تدفقان كاملان في الذاكرة. [1] [2]

المثال

import bz2 as z
a=z.compress(b"bud")
b=z.compress(b"leaf")
d=z.BZ2Decompressor()
print(d.decompress(a+b))
print(d.unused_data==b)
print(z.decompress(a+b))

[1] [2]

حدود الكائن

المصدر ينشئ كائنًا جديدًا في كل دورة للدالة، ثم ينتقل إلى unused_data. المخرجات b'bud'، True، b'budleaf'. الباقي هنا بايتات مضغوطة، وليس مخرجًا جاهزًا. [1] [2]

دالة bz2.decompress تعيد budleaf من تدفقين كاملين
فك التدفقين. [1] [2]

فك الباقي

مرّر d.unused_data إلى z.BZ2Decompressor() جديد؛ يعيد b'leaf'. إعادة استدعاء الكائن الأول بعد النهاية ترفع EOFError. المثال لا يضمن نجاح الفك لتدفق مبتور أو تالف. [1] [2]

المراجع

  1. Python 3.12: BZ2 stream boundaries
  2. CPython 3.12.14: bz2 wrappers
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.