загрузка с кодом Java очень медленная - PullRequest
1 голос
/ 24 марта 2011

Я написал немного кода, который читает ссылки на скачивание из текстового файла и загружает видео, используя метод copyURLToFile из библиотеки apaches commons-io, и загрузка действительно медленная, когда я в моем wlan. когда я вставляю интернет-флешку, это примерно в 6 раз быстрее, хотя флешка получила 4 Мбит, а мой WLAN - 8 Мбит. я также пытался сделать это без библиотеки commons-io, но проблема та же. обычно я загружаю 600-700 кбит / с в моем wlan, но с java он загружает только со скоростью около 50 кбит / с. С интернетом воткнуть его около 300 кб / с. Вы знаете, в чем может быть проблема?

заранее спасибо

// Редактировать: вот код, но я не думаю, что он имеет какое-либо отношение к этому, и что вы имеете в виду с сетевыми политиками?

FileInputStream fstream = new FileInputStream(linksFile);
    DataInputStream in = new DataInputStream(fstream);
    BufferedReader br = new BufferedReader(new InputStreamReader(in));

    String link;
    String name;

    while ((link = br.readLine()) != null) {
        name = br.readLine();
        FileUtils.copyURLToFile(new URL(link), new File("videos/"+name+".flv"));;
        System.out.println(link);
    }

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Скорее всего, это не проблема Java.

Код, который вы разместили, на самом деле не выполняет никаких операций ввода-вывода по сети - он просто определяет URL-адрес и передает его (предположительно, Apache Commons)') FileUtils.copyURLToFile.Как обычно в популярных сторонних библиотеках, если бы в этом методе была ошибка, которая вызывала медленную пропускную способность во всех, кроме самых необычных ситуациях, он уже был бы идентифицирован (и, мы надеемся, исправлен).

Таким образом, проблемасобирается лежать в другом месте.Получаете ли вы ожидаемые скорости при доступе к ресурсу обычными методами HTTP (например, в браузере)?Если нет, то на уровне ОС существует универсальная проблема.В противном случае я бы взглянул на политики в вашей сети.

На ум приходят две возможные причины:

  • Очевидная причина - это своего рода формирование трафика - деприоритизация вашей сетипакеты, которые приходят из вашего Java-приложения (по потенциально произвольной причине).Вы должны увидеть, как это настроено, и просмотреть его журналы, чтобы убедиться, что это так.
  • Проблема связана с DNS.Если Java использует основной сервер, который либо заблокирован, либо невероятно медленный, то преобразование этого URL-адреса в IP-адрес и начало фактической передачи может занять несколько секунд.Однажды у меня была похожая проблема, когда брандмауэр молча отбрасывал пакеты на один сервер, и процесс Java переключался на вторичный сервер в течение трех секунд (за поиск!).

В любом случае,это почти наверняка не код Java, который виноват.

0 голосов
/ 24 марта 2011

Файл FileUtils.copyURLToFile использует буфер для чтения.Увеличение значения буфера может ускорить загрузку, но это кажется невозможным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...