
الهدف:
يوجد جهاز كمبيوتر بدون الإنترنت ولكن من الممكن نقل الملف عبر USB. يوجد جهاز لوحي به شبكة إنترنت يمكن نقل هذا الملف منه. على الجهاز اللوحي ، يمكنك تنزيل السيل المطلوب ولكن لا توجد مساحة كافية. الملف في سيل واحد وكبير.
الطريق إلى الحل:
لقد بدأت سيل لتحميل. عندما انتهت المساحة الخالية تقريبًا ، أوقفت التنزيل مؤقتًا. قمت بتوصيل الكمبيوتر اللوحي بالكمبيوتر ونقله من الكمبيوتر اللوحي إلى الكمبيوتر الشخصي. لقد توقف مؤقتًا ، ولدهشتي ، تم إنشاء الملف مرة أخرى واستمر سيل في التأرجح أكثر كما لو لم يحدث شيء.
نظرًا لحقيقة أن عميل التورنت يقوم بتعيين العلامة المتفرقة على ملف يكتب فيه البيانات المستلمة ، فإن النظام لا يحاول على الفور حجز 16 جيجا بايت ولن يكون هناك أي خطأ عند محاولة الكتابة إلى ملف يتجاوز 4 جيجابايت.
كرر الإجراء أربع مرات ، تلقيت أربعة ملفات على الكمبيوتر الشخصي فيها أجزاء مختلفة من نفس السيل. الآن يبقى تجميعها معًا. الإجراء بسيط في الأساس. من الضروري استبدال صفر بايت بقيمة أخرى إذا كانت في هذا الموضع في أحد الملفات الأربعة.
يبدو لي أن مثل هذا البرنامج البسيط يجب أن يكون على الإنترنت. حقا لا أحد واجه مثل هذه المهمة؟ لكنني أدركت أنني لا أعرف حتى الكلمات الرئيسية التي يجب أن أبحث عنها. لذلك ، ألقيت بسرعة لوا النصي لهذه المهمة والآن أنا الأمثل لها. أريد أن أشاركه.
تحميل سيل في أجزاء
- بدء تنزيل سيل على الجهاز الأول
- انتظر حتى يتم ملء ROM
- توقف التحميل
- نقل الملف إلى الجهاز الثاني وإضافة رقم إلى اسم الملف
- ارجع إلى النقطة الأولى حتى يتم تنزيل الملف بالكامل
دمج أجزاء في ملف واحد
بعد استلام الجزء الأخير ، من الضروري تجميعها في ملف واحد كامل.
المهمة بسيطة:
- قراءة جميع الأجزاء في وقت واحد
- إذا كانت البايت غير الصفرية مكتوبة في الإخراج في جزء ما في المخرجات ، وإلا فإننا نكتب صفر
تأخذ الدالة merge_part
مجموعة من التدفقات streams_in
التي تقرأ منها جزءًا من حجم buffer_length
وترجع نتيجة دمج الأجزاء من التدفقات المختلفة.
function merge_part(streams_in, buffer_length) local out_part for _, stream in ipairs(streams_in) do local in_part = stream:read(buffer_length) if not out_part then out_part = in_part
إن وظيفة string.gsub
مناسبة للمهمة حيث ستجد قطعًا مملوءة string.gsub
ما تم تمريره إليها.
string.gsub
لا يتجاوز الموضع الذي تم العثور على تطابق فيه. لذلك ، نقوم بالبحث المتوازي عن الموضع zero_string
باستخدام دالة string.find
. يكفي العثور على البايت صفر الأول.
الآن ، إذا كان لدى in_part
بيانات لـ out_part
بنسخها.
قمنا بقص الجزء المقابل لتسلسل الأصفار من in_part
.
هناك بيانات في part
.
تحول part
إلى أن يكون أقل من سلسلة من الأصفار. نحن نكملها معهم.
استنتاج
وبالتالي ، كان من الممكن تنزيل وتجميع هذا الملف على جهاز كمبيوتر. بعد عملية الدمج ، قمت بسحب ملف تورنت من الجهاز اللوحي. قمت بتثبيت العميل سيل على جهاز الكمبيوتر والتحقق من الملف معها.
يمكن ترك الجزء الأخير الذي تم تنزيله على الجهاز اللوحي في التوزيع ، ولكن يجب عليك تضمينه قبل إعادة التحقق من الأجزاء وإلغاء تحديد الملف حتى لا يتم تنزيله مرة أخرى.
يستخدم:
- سيل العميل Flud على الجهاز اللوحي.
- QBittorent سيل العميل على جهاز الكمبيوتر.
- النصي لوا