تقنية

write_through في بايثون: هل تفرغ المخزن الثنائي أيضًا؟

بعد كتابة bud: مخزن BytesIO فارغ.
قبل التفريغ.

write_through=True تمرر الكتابة إلى المخزن الثنائي؛ لا تفرغ BufferedWriter في تجربتنا. [1]

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

لا؛ المخزن الثنائي يحتفظ بالبايتات هنا. [1]

  • write_through=True تمرر الكتابة إلى المخزن الثنائي؛ لا تفرغ BufferedWriter في تجربتنا. [1]
  • على CPython 3.12.14، نغلف BytesIO عبر BufferedWriter بحجم 16 بايت، ثم TextIOWrapper بترميز utf-8. [1]
  • text.write("bud") تكتب ثلاثة محارف؛ raw.getvalue() تعطي b"" قبل التفريغ، رغم تفعيل write_through. [1]
  • binary.flush() تنقل البايتات المحتفظ بها؛ بعدها raw.getvalue() تعطي b"bud". [1]
  • تحكم دون BufferedWriter: غلاف نصي على BytesIO مباشرة، بالإعدادين نفسيهما، يعطي b"bud" بعد الكتابة. المثال في الذاكرة فقط؛ لا يختبر حفظ القرص. [1]

تمرير وتفريغ

write_through=True تمرر الكتابة إلى المخزن الثنائي؛ لا تفرغ BufferedWriter في تجربتنا. [1]

طبقتا المثال

على CPython 3.12.14، نغلف BytesIO عبر BufferedWriter بحجم 16 بايت، ثم TextIOWrapper بترميز utf-8. [1]

قبل التفريغ

text.write("bud") تكتب ثلاثة محارف؛ raw.getvalue() تعطي b"" قبل التفريغ، رغم تفعيل write_through. [1]

import io raw=io.BytesIO() binary=io.BufferedWriter(raw,buffer_size=16) text=io.TextIOWrapper(binary,encoding="utf-8",write_through=True) print(text.write("bud"),raw.getvalue()) [1]

بعد binary.flush(): مخزن BytesIO يحوي b"bud".
بعد التفريغ.

التفريغ والتحكم

binary.flush() تنقل البايتات المحتفظ بها؛ بعدها raw.getvalue() تعطي b"bud". [1]

binary.flush() print(raw.getvalue()) direct=io.BytesIO() control=io.TextIOWrapper(direct,encoding="utf-8",write_through=True) control.write("bud") print(direct.getvalue()) [1]

تحكم دون BufferedWriter: غلاف نصي على BytesIO مباشرة، بالإعدادين نفسيهما، يعطي b"bud" بعد الكتابة. المثال في الذاكرة فقط؛ لا يختبر حفظ القرص. [1]

المراجع

  1. Python io

للتوسع: لغات البرمجة.

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