2015-04-26 2 views
0

Мое приложение необходимо перенести несколько файлов на http-сервер (открыв OutputStream из HttpUrlConnection), но чтобы избежать накладных расходов на установление соединения, мы хотели бы использовать только одно соединение. Было бы возможно?Поток нескольких файлов через HttpUrlConnection

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

Спасибо за ваши советы!

ответ

3

Вы слишком оптимизированы. HttpURLConnection уже подключает TCP-соединение за кулисами. Просто используйте новый URL,HttpURLConnection, OutputStream и т. Д. Для каждого файла.

+1

Спасибо EJP! Не могли бы вы немного рассказать о пуле соединений TCP? (размер пула, тайм-аут и т. д.). Можно ли управлять этим пулом? Можно ли объединить соединение TCP, если мы вызываем UrlConnection.disConnect() после каждой передачи? – opera

0

Тот факт, что у вас есть для вывода более чем один файл не мешает тот факт, что вы все еще можете использовать формат архива, который может быть создан с помощью вашей OutputStream , в настоящее время; и zip - такой формат.

JDK имеет ZipOutputStream, который может вам помочь; в основном вы можете использовать его в качестве такового (код, чтобы установить HTTP заголовки не показаны):

// out is your HttpUrlConnection's OutputStream 

try (
    final ZipOutputStream zout = new ZipOutputStream(out); 
) { 
    addEntries(zout); 
} 

Метод addEntries() затем создать ZipEntry экземпляров, по одному на файл и записать содержимое.

+0

Спасибо fge! Фактически данные уже записываются непосредственно в GZIPOutputStream. Файл результатов в пункте назначения будет .tar.gz. Проблема здесь в том, что данные поступают после периода (1 файл каждые 5 минут), и нам нужно его немедленно передать. – opera

Смежные вопросы