URLConnection и длина контента: сколько данных загружается? - PullRequest
0 голосов
/ 26 августа 2011

Я создал сервлет, который считывает содержимое файла в байтовый массив, который впоследствии записывается в OutputStream ответа:

// set headers
resp.setHeader("Content-Disposition","attachment; filename=\"file.txt\"");
resp.setHeader("Content-Length", "" + fileSize);

// output file content.
OutputStream out = resp.getOutputStream();
out.write(fileBytes);
out.close();

Теперь я также написал «клиент», который должен выяснить, насколько велик файл. Это должно быть достаточно просто, так как я добавил заголовок «Content-Length».

URLConnection conn = url.openConnection();
long fileSize = conn.getContentLength();

Однако я немного не уверен в общей картине. Как я понимаю, мой собственный сервлет, все содержимое файла сбрасывается в OutputStream ответа. Однако вызывает ли вызов getContentLength () также фактическую загрузку данных файла как-то частично или полностью? Другими словами, когда я вызываю conn.getContentLength (), какая часть файла будет возвращена с сервера? Заголовки "отделены" от контента?

Весь вклад высоко ценится!

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Однако вызывает ли вызов getContentLength () также фактическую или частичную загрузку фактических данных файла?

Нет, метод getContentLength() просто возвращает строковое значениеразмер содержимого в виде целого числа.

Другими словами, когда я вызываю conn.getContentLength (), какая часть файла будет возвращена с сервера?

Ни один из файлов не будет загружен.

Заголовки "отделены" от контента?

Да, заголовки "отделены" от контента.

Теперь вы уверены: D

1 голос
/ 26 августа 2011

См. Javadocs

Возвращает значение поля заголовка content-length.

Так что вызов getContentLength() просто читает значение заголовка и не вызывает загрузку. Вы должны позвонить getContent() для этого.

...