Frage

Ich habe einen Code, der eine Reihe von HTTP erhält, Beiträge und verwendet Commons httpclient 3.1. Ich möchte in meiner GUI einen aktuellen Übertragungsgeschwindigkeitsindikator bereitstellen, konnte jedoch keine Methoden zur Bestimmung der Übertragungsrate eines HTTPMethod -Verfahrens finden.

Ich konnte einfach nur die Übertragung und ein einfaches Mathematik machen, nachdem es abgeschlossen war, um festzustellen, wie die Geschwindigkeit war, aber dies bietet eine schlechte Benutzererfahrung während eines langen Uploads oder einem langen Upload oder einem Download. Weiß jemand während es wird immer noch verarbeitet?

War es hilfreich?

Lösung

Ich habe Httpclient nicht ausgiebig verwendet, daher gibt es möglicherweise einen einfachen Haken. Es scheint jedoch, dass es so aussieht HttpConnection.getResponseInputStream ()) Gibt ein einfaches zurück InputStream.

Um den Haken selbst hinzuzufügen, müssten Sie überschreiben HttpConnectionManager und HttpConnection, um einen dekorierten Stream zurückzugeben, der die Anzahl der gelesenen Bytes im Auge behält. Sie können dann einen zweiten Thread aufrücken, um diesen Stream zu befragen und die Übertragungsrate anzuzeigen, oder (besser) den Stream mit einem Rückruf jeder N -Bytes erstellen (besser, weil Sie sich nicht um die Parallelität kümmern müssen, und Sie können auch n festlegen so dass der Rückruf nur für große Dateien aufgerufen wird).

Andere Tipps

Einfacherer Haken wäre, die zu erweitern HttpEntityWrapper und überschreiben die getContent() Methode:

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

Später können Sie dies als Antwort -Interceptor hinzufügen

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

Auf diese Weise müssen Sie die erwähnten nicht außer Kraft setzen HttpConnectionManager und HttpConnection

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top