В Java, как подсчитать размер загрузки веб-страницы во время загрузки? - PullRequest
0 голосов
/ 16 мая 2011

Я хочу сделать это:

У меня есть максимальный размер предела для загрузки (например, 10 МБ).Я начинаю загрузку веб-страницы.Если загрузка страницы не заканчивается до тех пор, пока не будет достигнут лимит, я останавливаю загрузку.

Я сделал аналогичный вопрос здесь: В Java можно определить размер веб-страницы перед загрузкой? , но нужно было определить размер страницы, прежде чем я начну загрузку, но некоторые серверы не отправляют эту информацию.Теперь мне нужно управлять во время загрузки.

Они сказали мне использовать CountInputStream .Это способ?Я использую HttpUrlConnection , поэтому загрузка не выполняется с getInputStream ?

Ответы [ 4 ]

2 голосов
/ 16 мая 2011

Если веб-сервер поддерживает его, вы можете посмотреть на заголовок Content-Length, который скажет вам, насколько большим будет объект:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Если сервер /Элемент не поддерживает длину содержимого, вам нужно прочитать все целиком и просто посчитать байты ...

Ответ, на который вы ссылаетесь, кажется, содержит большую часть остальной информации, которая вам понадобится,разве это не такой же вопрос, как у вас?

1 голос
/ 16 мая 2011

Если вы используете HttpUrlConnection для чтения с удаленного ресурса по HTTP, это означает, что вы читаете данные, возвращенные удаленным ресурсом, используя HttpUrlConnection.getInputStream().

Чтобы подсчитать количество байтов, прочитанных при чтении из соединения, просто ... посчитайте количество байтов, прочитанное из inputStream.Например:

HttpUrlConnection conn = ...;
byte[] dataBuffer = new byte[MAX_BYTES];
InputStream stream = conn.getInputStream();
int bytesRead, totalRead = 0;
while (bytesRead != -1) {
    bytesRead = stream.read(dataBuffer, totalRead, bufferLength);
    totalRead += bytesRead;
    if (totalRead > MAX_BYTES) throw new FileTooBigException(...);
}
1 голос
/ 16 мая 2011

Вы можете сделать запрос HTTP HEAD, но он только возвратит «Content-Length» веб-страницы.

Размер веб-страницы - забавная вещь, поскольку веб-страница содержитмного других документов (графика, например).Content-Length не совсем «полный размер» документа, и даже если вы спросите длину контента в данный момент, это не гарантирует, что длина контента будет такой же, как и миллисекунда спустя.Для статических страниц длине содержимого, вероятно, можно доверять;однако для динамического контента я бы подтвердил, что длина контента иногда бывает неправильной или всегда неправильной.

0 голосов
/ 17 мая 2011

Если вы убедитесь, что HTTP 1.1 keep-alive включен (Соединение: keep-alive) и сервер согласен, сервер обязан отправить длину содержимого.

...