Java несколько загрузка соединения

Я хотел получить некоторый совет, я запустил на новом проекте создать акселератор загрузки Java, который будет использовать многочисленные связи. Я хотел знать, как лучше всего пойти об этом.

До сих пор я выяснил, что могу использовать HttpUrlConnection и использовать свойство диапазона, но требуемый для знания эффективного способа сделать это. Как только я имею, загружают части с многочисленных связей, я должен буду тогда присоединиться к частям так, чтобы мы закончили с полностью загруженным файлом.

Заранее спасибо:)

12
задан Brendon Randall 11 February 2010 в 08:15
поделиться

3 ответа

  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();
    }
}
11
ответ дан 2 December 2019 в 07:21
поделиться

Если вы хотите избежать присоединения сегментов после загрузки, вы можете использовать FileChannel .
С помощью FileChannel вы можете писать в любую позицию файла (даже с несколькими потоками).

Таким образом, вы можете сначала выделить весь файл, а затем
записать сегменты, которым они принадлежат по мере их поступления в .

См. страницу документации Javadocs для получения дополнительной информации.

8
ответ дан 2 December 2019 в 07:21
поделиться

JDownloader - лучший загрузчик, который я видел. Если вам интересно, он с открытым исходным кодом, и вы наверняка сможете многому научиться из их кода.

2
ответ дан 2 December 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: