Java 计算通过HTTP发送/接收的字节数

Java 计算通过HTTP发送/接收的字节数,java,http,byte,counter,Java,Http,Byte,Counter,在Java中, 如何计算通过活动HTTP连接发送和接收的字节数? 我想显示一些统计信息,如: Bytes Sent : xxxx Kb Bytes Received : xxxx Kb Duration : hh:mm 将HTTPURLConnection的getInputStream()和getOutputStream()封装在您自己的流中,计算通过它们的字节数。或者更好地使用ApacheCommons IO库——其中有计数流实现。很难看到如何对原始字节数据进行

在Java中,
如何计算通过活动HTTP连接发送和接收的字节数?
我想显示一些统计信息,如:

Bytes Sent     : xxxx Kb   
Bytes Received : xxxx Kb  
Duration       : hh:mm

将HTTPURLConnection的getInputStream()和getOutputStream()封装在您自己的流中,计算通过它们的字节数。或者更好地使用ApacheCommons IO库——其中有计数流实现。

很难看到如何对原始字节数据进行计数。您可以使用套接字重新实现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....

这种实现是不完整和未经测试的。您需要进一步研究结果的细节,以确保结果的准确性。

您使用的是什么机制?HttpURLConnection?你需要接收/发送的字节来包含头还是正文?事实上,我确实想在JavaMe中这样做,但我没有收到任何答案,所以我修改了JavaSE的问题,认为我可以解决这个问题。JavaME有HttpConnection接口,我想包括所有字节,因为我是根据通过网络发送和接收的字节来计算成本的。读取输入输出流不会计算头长度。计数将始终小于原始值。相反,我们应该在WIRESHARK中看到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);