0Pricing
Dart Academy · درس

بث الملفات الكبيرة

معالجة الملفات جزءًا بعد جزء

بث الملفات الكبيرة درس مجاني في Dart Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Dart Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Dart Academy 4 دروس في المجموع.

لماذا لا نقرأه كله؟

تحمّل readAsString الملف بأكمله في الذاكرة. وقد يؤدي ذلك إلى تعطّل برنامجكم عند التعامل مع سجل ضخم أو فيديو، لذا استخدموا stream بدلًا من ذلك.

فتح تدفق قراءة

استدعِ openRead على كائن File للحصول على تدفق من أجزاء البايتات. عالِج كل جزء ثم تخلّص من الأجزاء القديمة.

final stream = File('big.log').openRead();

التنقّل بين الأجزاء

استخدم await for لاستلام كل جزء عند وصوله. وتظل الذاكرة مستقرة مهما ازداد حجم الملف.

await for (final chunk in stream) { use(chunk); }

البايتات تحتاج إلى فك ترميز

كل جزء عبارة عن بايتات خام. لقراءة النص، مرّر التدفق عبر utf8.decoder لتحصل بدلاً من ذلك على أجزاء من String.

stream.transform(utf8.decoder);

التقسيم إلى أسطر

صِل LineSplitter بعد وحدة فك الترميز، وسيُصدر التدفق سطراً واحداً منسقاً في كل مرة، جاهزاً للمعالجة.

stream.transform(utf8.decoder).transform(LineSplitter());

عدّ الأسطر بكفاءة

أصبح عدّ أسطر ملف يحتوي على مليون سطر عملية بسيطة وخفيفة. زِد عدّاداً داخل الحلقة، ولا تحتفظ بالملف بأكمله في الذاكرة.

var n = 0; await for (final l in lines) n++;

فتح تدفق كتابة

هل تكتب مخرجات كبيرة؟ يعيد openWrite كائناً من نوع IOSink تغذّيه تدريجياً، مع تفريغ البيانات إلى القرص أثناء التقدّم.

final sink = File('out.txt').openWrite();

تغذية المصب

أرسل النص باستخدام sink.write أو sink.writeln داخل حلقة. يرسل كل استدعاء مزيداً من البيانات دون إعادة إنشاء String ضخم.

for (final row in rows) sink.writeln(row);

أغلِق المصب دائماً

عند الانتهاء، استدعِ close وانتظر اكتماله. يؤدي ذلك إلى تفريغ البايتات الأخيرة وتحرير مقبض الملف بطريقة سليمة.

await sink.close();

تمرير التدفق إلى المصب

لنسخ ملف بكفاءة، مرّر pipe تدفق القراءة مباشرةً إلى مصب الكتابة. يتولى Dart إدارة التحكم في التدفق العكسي نيابةً عنك.

await source.openRead().pipe(target.openWrite());

معالجة أخطاء التدفق

قد تتعطل التدفقات أثناء المعالجة. أحط الحلقة بـ try/catch حتى لا يؤدي خطأ في القراءة إلى إتلاف النتائج بصمت.

try { await for (final c in stream) {} } catch (e) {}

تحقق سريع

يجب عليك معالجة سجل حجمه 5 GB على جهاز محدود الإمكانات. ما النهج الصحيح؟

مراجعة

أصبحت الآن تقرأ باستخدام التدفق عبر openRead، وتفك الترميز وتقسم إلى أسطر، وتكتب تدريجياً عبر IOSink، وتستخدم pipe للنسخ السريع.

الأسئلة الشائعة

هل درس «بث الملفات الكبيرة» مجاني؟

نعم — نص درس «بث الملفات الكبيرة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Dart Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Dart Academy 4 دروس في المجموع.

ماذا ستتعلم في «بث الملفات الكبيرة»؟

معالجة الملفات جزءًا بعد جزء تتمرن على Dart Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Dart Academy؟

لا تُشترط خبرة سابقة. Dart Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «بث الملفات الكبيرة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Dart Academy هذا؟

نعم. كل درس في Dart Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قراءة الملفات وكتابتها
  2. الأدلة والمسارات وFileSystemEntity
  3. بث الملفات الكبيرة
  4. ‏Stdin وStdout ووسائط Process
← العودة إلى Dart Academy