Как получить текущую скорость передачи в Commons HttpClient 3.x


person Ian Levesque    schedule 16.11.2009    source источник


Ответы (2)


Я не использовал HttpClient широко, поэтому может быть простой хук. Однако оказывается, что HttpConnection.getResponseInputStream() возвращает простой InputStream.

Чтобы добавить ловушку самостоятельно, вам нужно переопределить HttpConnectionManager и HttpConnection, чтобы вернуть оформленный поток, который отслеживает количество прочитанных байтов. Затем вы можете запустить второй поток, чтобы опросить этот поток и отобразить скорость передачи, или (лучше) создать поток с обратным вызовом каждые N байтов (лучше, потому что вам не нужно заботиться о параллелизме, и вы также можете установить N так что обратный вызов вызывается только для больших файлов).

person kdgregory    schedule 16.11.2009
comment
Похоже, я смогу совместить этот совет с кодом из docstore.mik. ua/orelly/java-ent/dist/ch08_04.htm и заставить что-то работать, я попробую и отчитаюсь. - person Ian Levesque; 17.11.2009
comment
Работает. Лучшего способа я не нашел, к сожалению. Достаточно хорошо! - person Ian Levesque; 24.11.2009

Проще всего было бы расширить метод HttpEntityWrapper и переопределить метод getContent():

public InputStream getContent() throws IOException {
    InputStream wrappedin = wrappedEntity.getContent();
    return new MyTransferRateInputStream(wrappedin);
}

Позже вы можете добавить это как перехватчик ответа

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

Таким образом, вам не нужно переопределять упомянутые HttpConnectionManager и HttpConnection.

person Ivan Senic    schedule 06.09.2012