Если скачивать файлы с помощью java.nio.Files.copy, то в момент скачивания файла, в top-е видно как java поедает процессорное время. Если качать тоже самое обычным wget-ом, то процессорное время потребляется значительно меньше.
$ time wget http://speedtest.london.linode.com/100MB-london.bin
...
real 0m5.434s
user 0m0.056s
sys 0m0.536s
$ time java -jar Test.jar http://speedtest.london.linode.com/100MB-london.bin
real 0m4.937s
user 0m0.828s
sys 0m0.572s
Время скачивания, что через java, что через wget всегда примерно одинаковое (+/- 1 секунда), но вот потребление CPU (и это видно в user time) у java всегда больше.
Есть ли способы качать файлы на java быстрее, чем java.nio.Files.copy? (обязательное условие — возможность задать timeout на connect и read)
package test;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
public class Test {
public static void main(String[] args) throws MalformedURLException, IOException {
URL url = new URL(args[0]);
URLConnection urlConnection = url.openConnection();
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
Files.copy(urlConnection.getInputStream(), (new File("1.iso")).toPath(), StandardCopyOption.REPLACE_EXISTING);
}
}