Постоянно соединение с сайтом

114
07 августа 2019, 11:50

Допустим есть некий сайт, с которого я скачиваю много картинок. Пример сайта:

https://site.com/111.png
https://site.com/222.png
https://site.com/333.png

Скачиваю я их так:

ImageIO.read(new URL(link))

Проблема в том, что я скачиваю очень много и часто, что не есть хорошо для производительности. Возможно ли открыть соединение к сайту и скачивать картинки только по их "id"? Чтобы каждый раз не создавать соединение. Либо открыть одно соединение и скачать через него много картинок разом.

Answer 1

Вы можете установить соединение с web-сервером и попытаться запросить сразу несколько файлов, только если сервер поддерживает HTTP pipelining:

Socket s = new Socket(InetAddress.getByName("site.com"), 80);
PrintWriter pw = new PrintWriter(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
pw.println("GET /1.jpg HTTP/1.1");
pw.println("Host: site.com");
pw.println("Connection: keep-alive");
pw.println();
pw.println("GET /2.jpg HTTP/1.1");
pw.println("Host: site.com");
pw.println();
pw.flush();
String t;
while ((t = br.readLine()) != null) System.out.println(t);
br.close();
pw.close();
s.close();

Если сервер не поддерживает keep-alive, я бы вынес закачку картинок в разные потоки, это ускорит время работы вашей программы.

READ ALSO
Диалоговые окна. Как получить данные от дочернего окна?

Диалоговые окна. Как получить данные от дочернего окна?

Можно ли создать создать в JavaFx диалоговое окно что бы при вызове метода showDialog() он возвращал не которые парамеры, как это происходит в Alert и он возвращает...

134
Открыть изображения в ListView из БД

Открыть изображения в ListView из БД

В БД сохранены ссылки на исображения которые локально хранятся на устройствеПри открытии лист вью я использую кастомный адаптер который...

121
Как получить класс из переменной и создать новый объект этого класса

Как получить класс из переменной и создать новый объект этого класса

Имеется запись вида: List list; В абстрактном классеВ наследниках через конструктор, я его инициализирую

122