java.nio.file.Files.copy кушает процессорное время
От: sergey123_1  
Дата: 18.01.15 13:42
Оценка:
Если скачивать файлы с помощью 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);
    }   
}
java.nio copy http cpu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.