Как скачать и сохранить файл из Интернета с помощью Java?

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

метод LineCollection намного быстрее в моих руках .

# Setup
x = np.linspace(0,4*np.pi,1000)
y = np.sin(x)
MAP = 'cubehelix'
NPOINTS = len(x)

Мы проверим итеративный график по методу LineCollection выше.

%%timeit -n1 -r1
# Using IPython notebook timing magics
fig = plt.figure()
ax1 = fig.add_subplot(111) # regular resolution color map
cm = plt.get_cmap(MAP)
for i in range(10):
    ax1.set_color_cycle([cm(1.*i/(NPOINTS-1)) for i in range(NPOINTS-1)])
    for i in range(NPOINTS-1):
        plt.plot(x[i:i+2],y[i:i+2])

1 loops, best of 1: 13.4 s per loop

%%timeit -n1 -r1 
fig = plt.figure()
ax1 = fig.add_subplot(111) # regular resolution color map
for i in range(10):
    colorline(x,y,cmap='cubehelix', linewidth=1)

1 loops, best of 1: 532 ms per loop

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

412
задан Rubens Mariuzzo 28 August 2013 в 23:38
поделиться

4 ответа

Попробуйте Java NIO :

URL website = new URL("http://www.website.com/information.asp");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("information.html");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

Использование transferFrom () потенциально намного более эффективно, чем простой цикл, который считывает из исходного канала и записывает в этот канал. Многие операционные системы могут передавать байты напрямую из исходного канала в кеш файловой системы, не копируя их.

Подробнее об этом здесь .

Примечание : Третий параметр в transferFrom - это максимальное количество байтов для передачи. Integer.MAX_VALUE передаст не более 2 ^ 31 байтов, Long.MAX_VALUE позволит передать не более 2 ^ 63 байтов (больше, чем любой существующий файл).

550
ответ дан 22 November 2019 в 23:26
поделиться

Лично я обнаружил, что Apache HttpClient более чем способен на все, что мне нужно было сделать в связи с этим. Здесь - отличный учебник по использованию HttpClient

8
ответ дан 22 November 2019 в 23:26
поделиться

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

BufferedInputStream in = new BufferedInputStream(new URL("http://www.website.com/information.asp").openStream())
    byte data[] = new byte[1024];
    int count;
    while((count = in.read(data,0,1024)) != -1)
    {
        out.write(data, 0, count);
    }
23
ответ дан 22 November 2019 в 23:26
поделиться
public void saveUrl(final String filename, final String urlString)
        throws MalformedURLException, IOException {
    BufferedInputStream in = null;
    FileOutputStream fout = null;
    try {
        in = new BufferedInputStream(new URL(urlString).openStream());
        fout = new FileOutputStream(filename);

        final byte data[] = new byte[1024];
        int count;
        while ((count = in.read(data, 0, 1024)) != -1) {
            fout.write(data, 0, count);
        }
    } finally {
        if (in != null) {
            in.close();
        }
        if (fout != null) {
            fout.close();
        }
    }
}

Вам нужно будет обработать исключения, возможно, внешние по отношению к этому методу.

85
ответ дан 22 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

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