在Java中,
如何计算通过活动HTTP连接发送和接收的字节数?
我想显示像一些统计数据:计数通过HTTP发送/接收的字节数
Bytes Sent : xxxx Kb
Bytes Received : xxxx Kb
Duration : hh:mm
在Java中,
如何计算通过活动HTTP连接发送和接收的字节数?
我想显示像一些统计数据:计数通过HTTP发送/接收的字节数
Bytes Sent : xxxx Kb
Bytes Received : xxxx Kb
Duration : hh:mm
很难看出你如何装饰HttpConnection来计算原始字节数据。您可以使用套接字重新实现HTTP,但这对于达到这些长度必须非常重要。从stackoverflow.com
样本响应:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 21 Sep 2009 11:46:48 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
Date: Mon, 21 Sep 2009 11:46:48 GMT
Content-Length: 19452
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>...remaining data....
HTTP请求是相当简单的,所以你可以尝试使用暴露的信息重建它。形式如下:
// TODO: edge cases, error handling, header delimiter, etc.
int byteCount = 0;
int headerIndex = 0;
while (true) {
String key = httpConnection.getHeaderFieldKey(headerIndex);
if (key == null)
break;
String value = httpConnection.getHeaderField(headerIndex++);
byteCount += key.getBytes("US-ASCII").length
+ value.getBytes("US-ASCII").length + 2;
}
byteCount += httpConnection.getHeaderFieldInt("Content-Length",
Integer.MIN_VALUE);
该实现是不完整的,未经测试。您需要详细了解HTTP protocol的详细信息,以确保结果的准确性。
裹HttpURLConnection的的getInputStream()和getOutputStream方法()在自己的流表示,计数,通过他们去的字节数。或者甚至更好地使用Apache Commons IO库 - 他们在那里计数流实现。
reading输入输出流不会计算HEADER长度。数量总是比原来少。而应该看到WIRESHARK中http连接使用的字节(用于采样) – 2011-12-08 09:10:55
你使用什么机制? HttpURLConnection的?你是否需要接收/发送的字节包含标题或仅包含正文? – McDowell 2009-09-19 17:50:57
其实,我真的想在Java ME中做到这一点,但我没有收到任何答案,所以我修改了我的Java SE问题,以为我可以以某种方式解决问题。那么JavaME有HttpConnection接口http://java.sun.com/javame/reference/apis/jsr118/ – 2009-09-19 17:57:30
我想包括所有的字节,因为我计算成本取决于通过网络发送和接收的字节。 – 2009-09-19 17:59:09