سؤال

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

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

شكرا لك مقدما :)

هل كانت مفيدة؟

المحلول

  1. احصل على ال طول المحتوى من الملف لتنزيله.
  2. يقسم وفقا لمعايير (الحجم والسرعة، ...).
  3. قم بتشغيل مؤشرات الترابط متعددة لتنزيل الملف الذي يبدأ في مواقع مختلفة،
    وحفظها في ملفات مختلفة: myfile.part1,  myfile.part2, …
  4. بمجرد تنزيلها، انضم إلى الأجزاء ملف واحد واحد.

حاولت التعليمة البرمجية التالية للحصول على طول المحتوى:

public Downloader(String path) throws IOException {
    int len = 0;
    URL url = new URL(path);
    URLConnection connectUrl = url.openConnection();
    System.out.println(len = connectUrl.getContentLength());
    System.out.println(connectUrl.getContentType());

    InputStream input = connectUrl.getInputStream();
    int i = len;
    int c = 0;
    System.out.println("=== Content ==="); 
    while (((c = input.read()) != -1) && (--i > 0)) {
        System.out.print((char) c);
    }
    input.close(); 
}

إليك نموذج التعليمات البرمجية للانضمام إلى الملفات:

public void join(String FilePath) {
    long leninfile=0, leng=0;
    int count=1, data=0;
    try {
        File filename = new File(FilePath);
        RandomAccessFile outfile = new RandomAccessFile(filename,"rw");
        while(true) {
            filename = new File(FilePath + count + ".sp");
            if (filename.exists()) {
                RandomAccessFile infile = new RandomAccessFile(filename,"r");
                data=infile.read();
                while(data != -1) {
                    outfile.write(data);
                    data=infile.read();
                }
                leng++;
                infile.close();
                count++;
            } else break;
        }
        outfile.close();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

نصائح أخرى

إذا كنت ترغب في تجنب الانضمام إلى قطاعات بعد تنزيلك، فيمكنك استخدام FileChannel.
مع FileChannel, ، يمكنك الكتابة إلى أي موضع لملف (حتى مع مؤشرات الترابط متعددة).

لذلك يمكنك أولا تخصيص الملف بأكمله، ثم
اكتب القطاعات التي ينتمون إليها كما يأتون.

انظر جافادوكز صفحة لمزيد من المعلومات.

jdownloader. هو أفضل تنزيل رأيته. إذا كنت مهتما، فهو مفتوح المصدر وبالتأكيد يمكنك تعلم الكثير من التعليمات البرمجية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top