Java 如何在Commons HttpClient 3.x中获取当前传输速率

Java 如何在Commons HttpClient 3.x中获取当前传输速率,java,apache-commons-httpclient,Java,Apache Commons Httpclient,我有一些代码,可以使用这些代码执行大量HTTP GET、POST和PUTs。我想在GUI中提供当前传输速度指示器,但找不到任何方法来确定正在处理的HttpMethod的传输速率 我可以轻松地计算传输时间,并在传输完成后做一些简单的计算,以确定传输速度,但这会在长时间的上传或下载过程中带来糟糕的用户体验。有人知道如何在Commons HttpClient请求仍在处理时确定其传输速率吗?我没有广泛使用HttpClient,因此可能有一个简单的钩子。但是,它似乎返回一个简单的InputStream 要

我有一些代码,可以使用这些代码执行大量HTTP GET、POST和PUTs。我想在GUI中提供当前传输速度指示器,但找不到任何方法来确定正在处理的HttpMethod的传输速率


我可以轻松地计算传输时间,并在传输完成后做一些简单的计算,以确定传输速度,但这会在长时间的上传或下载过程中带来糟糕的用户体验。有人知道如何在Commons HttpClient请求仍在处理时确定其传输速率吗?

我没有广泛使用HttpClient,因此可能有一个简单的钩子。但是,它似乎返回一个简单的
InputStream


要自己添加钩子,您需要覆盖
HttpConnectionManager
HttpConnection
,以返回一个修饰流,跟踪读取的字节数。然后,您可以启动第二个线程来轮询此流并显示传输速率,或者(更好)使用每N字节一次的回调来创建流(更好,因为您不必关心并发性,还可以设置N,以便只对大文件调用回调)。

我没有广泛使用HttpClient,所以可能有一个简单的钩子。但是,它似乎返回一个简单的
InputStream


要自己添加钩子,您需要覆盖
HttpConnectionManager
HttpConnection
,以返回一个修饰流,跟踪读取的字节数。然后,您可以启动第二个线程来轮询此流并显示传输速率,或者(更好)使用每N个字节一次的回调创建流(更好,因为您不必关心并发性,并且还可以设置N,以便只对大文件调用回调).

更简单的钩子是扩展
HttpEntityWrapper
并重写
getContent()
方法:

public InputStream getContent() throws IOException {
    InputStream wrappedin = wrappedEntity.getContent();
    return new MyTransferRateInputStream(wrappedin);
}
稍后,您可以将其添加为响应拦截器

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

这样,您就不需要覆盖前面提到的
HttpConnectionManager
HttpConnection
更简单的钩子,可以扩展
HttpEntityWrapper
并覆盖
getContent()
方法:

public InputStream getContent() throws IOException {
    InputStream wrappedin = wrappedEntity.getContent();
    return new MyTransferRateInputStream(wrappedin);
}
稍后,您可以将其添加为响应拦截器

httpClient.addResponseInterceptor(HttpResponseInterceptor itcp)

这样,您就不需要覆盖前面提到的
HttpConnectionManager
HttpConnection

,看起来我可能可以将此建议与源代码结合起来,使某些功能正常工作,我将尝试并报告。Works。不幸的是,我找不到更好的办法了。够好了!看起来我可能可以将此建议与中的代码结合起来,并使某些内容起作用,我将尝试并向您报告。Works。不幸的是,我找不到更好的办法了。够好了!